home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / backCONTROLLOOP.s < prev    next >
Encoding:
Text File  |  1996-07-05  |  54.5 KB  |  2,852 lines

  1. ; Main control loop.
  2. ; This is the very outer loop of the program.
  3.  
  4. ; What needs to be done and when?
  5.  
  6. ; Black screen start.
  7. ; Load title music
  8. ; Load title screen
  9. ; Fade up title screen
  10. ; Select options
  11. ; Play game.
  12.  
  13. ; Playing the game involves allocating screen and
  14. ; level memory, loading the level, loading the
  15. ; samples, loading the wall graphics, playing the
  16. ; level, deallocating the screen memory....
  17.  
  18. ; Control part should therefore:
  19.  
  20. ; 1. Load Title Music
  21. ; 2. Load title screen
  22. ; 3. Fade up title screen.
  23. ; 4. Add 'loading' message
  24. ; 5. Load samples and walls
  25. ; 6: LOOP START
  26. ; 7. Option select screens
  27. ; 8. Free music mem, allocate level mem.
  28. ; 9. Load level
  29. ;10. Play level with options selected
  30. ;11. Reload title music
  31. ;12. Reload title screen
  32. ;13. goto 6
  33.  
  34. INTROTUNEADDR: dc.l 0
  35. INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
  36.  even
  37. TITLESCRNADDR: dc.l 0
  38. TITLESCRNNAME: dc.b 'TKG1:includes/titlescrnraw1',0
  39.  even
  40. TITLESCRNNAME2: dc.b 'TKG2:includes/titlescrnraw1',0
  41.  even
  42. OPTSPRADDR: dc.l 0
  43. TITLESCRNPTR: dc.l 0
  44.  
  45.  
  46.  
  47. ProtValA: dc.l 0
  48. ProtValB: dc.l 0
  49. ProtValC: dc.l 0
  50. ProtValD: dc.l 0
  51. ProtValE: dc.l 0
  52. ProtValF: dc.l 0
  53. ProtValG: dc.l 0
  54. ProtValH: dc.l 0
  55. ProtValI: dc.l 0
  56. ProtValJ: dc.l 0
  57. ProtValK: dc.l 0
  58. ProtValL: dc.l 0
  59. ProtValM: dc.l 0
  60. ProtValN: dc.l 0
  61.  
  62. MASTERPLAYERONEHEALTH:
  63.   dc.w 0
  64.   dc.w 0
  65. MASTERPLAYERONEAMMO:
  66.  ds.w 20
  67.  
  68. MASTERPLAYERONESHIELD:
  69.  dc.w 0
  70.  dc.w 0
  71. MASTERPLAYERONEGUNS:
  72.  dcb.w 10,0
  73.  
  74. MASTERPLAYERTWOHEALTH:
  75.   dc.w 0
  76.   dc.w 0
  77. MASTERPLAYERTWOAMMO:
  78.  ds.w 20
  79.  
  80. MASTERPLAYERTWOSHIELD:
  81.  dc.w 0
  82.  dc.w 0
  83. MASTERPLAYERTWOGUNS:
  84.  dcb.w 10,0
  85.  
  86. KVALTOASC:
  87.         Dc.b    " `  "," 1  "," 2  "," 3  "
  88.         dc.b    " 4  "," 5  "," 6  "," 7  "
  89.         dc.b    " 8  "," 9  "
  90. ; 10
  91.         Dc.b    " 0  "," -  "," +  "," \  "
  92.         dc.b     '    ','    '," Q  "," W  "
  93.         dc.b    " E  "," R  "
  94. ; 20
  95.         Dc.b    " T  "," Y  "," U  "," I  "
  96.         dc.b    " O  "," P  "," [  "," ]  "
  97.         dc.b    '    ','KP1 '
  98. ; 30
  99.         Dc.b    'KP2 ','KP3 '," A  "," S  "
  100.         dc.b    " D  "," F  "," G  "," H  "
  101.         dc.b    " J  "," K  "
  102. ;40
  103.         Dc.b    " L  "," ;  "," #  ",'    '
  104.         dc.b    '    ','KP4 ','KP5 ','KP6 '
  105.         dc.b    '    '," Z  "
  106. ;50
  107.         Dc.b    " X  "," C  "," V  "," B  "
  108.         dc.b    " N  "," M  "," ,  "," .  "
  109.         dc.b     " /  ",'    '
  110. ;60
  111.         Dc.b    '    ','KP7 ','KP8 ','KP9 '
  112.         dc.b    'SPC ','<-- ','TAB ','ENT '
  113.         dc.b    'RTN ','ESC '
  114. ;70
  115.         Dc.b    'DEL ','    ','    ','    '
  116.         dc.b    'KP- ','    ','UCK ','DCK '
  117.         dc.b    'RCK ','LCK '
  118. ;80
  119.         Dc.b    'FK1 ','FK2 ','FK3 ','FK4 '
  120.         dc.b    'FK5 ','FK6 ','FK7 ','FK8 '
  121.         dc.b    'FK9 ','FK0 '
  122. ;90
  123.         Dc.b    'KP( ','KP) ','KP/ ','KP* '
  124.         dc.b    'KP+ ','HLP ','LSH ','RSH '
  125.         dc.b    'CPL ','CTL '
  126. ;100
  127.         Dc.b    'LAL ','RAL ','LAM ','RAM '
  128.         dc.b    '    ','    ','    ','    '
  129.         dc.b    '    ','    '
  130.         Dc.b    '    ','    ','    ','    '
  131.         dc.b    '    ','    ','    ','    '
  132.         dc.b    '    ','    '
  133.  
  134.  even
  135.  
  136. FINISHEDLEVEL: dc.w 0
  137.  
  138. _IntuitionBase: dc.l 0
  139. _GfxBase: dc.l 0
  140. MyScreen: dc.l 0
  141.  
  142. MyNewScreen    dc.w    0,0        left, top
  143.         dc.w    320,16        width, height
  144.         dc.w    1        depth
  145.         dc.b    0,1        pens
  146.         dc.w    0        viewmodes
  147.         dc.w    CUSTOMSCREEN+SCREENQUIET    type
  148.         dc.l    0        font
  149.         dc.l    0    title
  150.         dc.l    0        gadgets
  151.         dc.l    0        bitmap
  152.  
  153.  
  154. INTUITION_REV    equ    31        v1.1
  155. int_name    INTNAME
  156.  even
  157.  
  158. START:
  159.  
  160.  move.b #'n',mors  
  161.  
  162. ************************************88
  163. * TAKE OUT WHEN PLAYING MODULE AGAIN
  164. ********************************
  165. ProtChkBLev1:
  166.     PRSDF
  167.     PRSDE
  168. ************************************
  169.  
  170. ; move.l #PROTCALLENC,a0
  171. ; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
  172. ; move.l #$75055345,d0
  173. ;codeitup:
  174. ; sub.l d0,(a0)+
  175. ; ror.l #1,d0
  176. ; dbra d1,codeitup
  177. ; rts
  178.  
  179. ProtChkCLev1:
  180.  PRSDA
  181.  
  182.  move.w #$7201,titleplanes
  183.  
  184.  move.l 4.w,a6
  185.  move.l #doslibname,a1
  186.  moveq #0,d0
  187.  jsr -552(a6)
  188.  move.l d0,doslib
  189.  
  190.     moveq    #INTUITION_REV,d0    version
  191.     lea    int_name(pc),a1
  192.     CALLEXEC OpenLibrary
  193.     tst.l    d0
  194. ;    beq    exit_false        if failed then quit
  195.     move.l    d0,_IntuitionBase    else save the pointer
  196.  
  197.     lea    MyNewScreen(pc),a0
  198.     
  199.     CALLINT    OpenScreen        open a screen
  200.     tst.l    d0
  201. ;    beq    exit_closeall        if failed the close both, exit
  202.     move.l    d0,MyScreen
  203.  
  204.     CALLINT RethinkDisplay
  205.  
  206.  move.l #LINKname,a0
  207.  jsr LOADAFILE
  208.  move.l d0,LINKFILE
  209.  
  210.  
  211. ; move.l doslib,a6
  212. ; move.l #LINKname,d1
  213. ; move.l #1005,d2
  214. ; jsr -30(a6)
  215. ; move.l d0,LLhandle
  216. ;
  217. ; move.l doslib,a6
  218. ; move.l d0,d1
  219. ; move.l #LINKSPACE,d2
  220. ; move.l #90000,d3
  221. ; jsr -42(a6)
  222. ;
  223. ; move.l doslib,a6
  224. ; move.l LLhandle,d1
  225. ; jsr -36(a6)
  226.  
  227.  
  228.  PRSDS
  229.  jsr stuff
  230.  
  231.  jsr _InitLowLevel
  232.  
  233. ; jsr CLEARTITLEPAL
  234.  
  235. ProtChkDLev1:
  236.  PRSDT
  237.  
  238.  move.w #$20,$dff1dc
  239.  move.l #titlecop,$dff080
  240.  PRSDV
  241.  move.w #$87c0,$dff000+dmacon
  242.  move.w #$8020,$dff000+dmacon
  243. ProtChkMLev1:
  244.  move.w $dff006,d0
  245.  lea RVAL2-100(pc),a0
  246.  add.w d0,100(a0)
  247.  
  248.  bsr GETTITLEMEM
  249. ProtChkELev1:
  250.  PRSDU
  251.  bsr CLROPTSCRN
  252.  
  253.  bsr SETUPTITLESCRN
  254.  
  255. ; jsr _InitPlayer
  256.  
  257. ; move.l #INTROTUNENAME,a0
  258. ; jsr _LoadModule
  259. ; move.l d0,INTROTUNEADDR
  260.  PRSDY
  261. ; move.l d0,a0
  262. ; jsr _InitModule
  263.  
  264. ; move.l INTROTUNEADDR,a0
  265. ; jsr _PlayModule
  266. ProtChkFLev1:
  267.  PRSDa
  268.  move.l #TITLESCRNNAME,TITLESCRNPTR
  269.  bsr LOADTITLESCRN2
  270.  
  271.  FLASHER $0f0,$fff
  272.  
  273. **********************************************
  274.  jsr INITQUEUE
  275. **********************************************
  276.  
  277.  move.w #0,FADEVAL
  278.  move.w #31,FADEAMOUNT
  279.  bsr FADEUPTITLE
  280.  PRSDB
  281.  jsr LOAD_SFX
  282.  jsr LOADWALLS
  283.  jsr LOADFLOOR
  284.  jsr LOADOBS
  285.  PRSDZ
  286.  
  287.  
  288.  move.l #backpicname,a0
  289.  move.l #BackPicture,d0
  290.  move.l #0,d1
  291.  jsr QUEUEFILE
  292.  
  293. ; IFNE CD32VER
  294.  PRSDD
  295. ; ENDC
  296.  
  297. ; jsr _StopPlayer
  298.  PRSDW
  299.  PRSDX
  300. ; jsr _RemPlayer
  301.  
  302.  
  303. ***********************************************
  304.  jsr FLUSHQUEUE
  305. ***********************************************
  306.  
  307.  jsr PATCHSFX
  308.  
  309.  move.w #23,FADEAMOUNT
  310.  bsr FADEDOWNTITLE 
  311.  
  312. ; bsr ASKFORDISK
  313.  
  314.  IFNE CD32VER
  315.  move.l doslib,a6
  316.  move.l #115,d1
  317.  jsr -198(a6)
  318.  ENDC
  319.  
  320. ; move.l #newblag,$80
  321. ; trap #0
  322. ; bra JUMPPASTIT
  323. ; rts
  324. ;
  325. ;newblag:
  326.  
  327.  
  328. ProtChkGLev1:
  329. ; bsr PROTSETUP
  330.  bsr DEFAULTGAME
  331.  
  332. ; move.l INTROTUNEADDR,a0
  333. ; jsr _UnLoadModule
  334.  
  335. ; IFEQ CD32VER
  336. ; jsr KInt_Init
  337. ; ENDC
  338. ProtChkHLev1:
  339. ; rte
  340. ;
  341. ;JUMPPASTIT:
  342.  
  343. BACKTOMENU:
  344.  
  345.  jsr CLEARKEYBOARD
  346.  
  347.  cmp.b #'s',mors
  348.  beq.s BACKTOSLAVE
  349.  cmp.b #'m',mors
  350.  beq.s BACKTOMASTER
  351.  bsr READMAINMENU
  352.  bra DONEMENU
  353. BACKTOMASTER:
  354.  bsr MASTERMENU
  355.  bra DONEMENU
  356. BACKTOSLAVE:
  357.  bsr SLAVEMENU
  358. DONEMENU:
  359.  
  360.  
  361.  bsr WAITREL
  362.  
  363. ; IFEQ CD32VER
  364. ; move.l OLDKINT,$68.w
  365. ; ENDC
  366.  
  367.  
  368.  
  369.  
  370.  bsr CLRSPRITES
  371.  
  372.  move.w #23,FADEAMOUNT
  373.  bsr FADEUPTITLE
  374.  move.w #31,FADEAMOUNT
  375.  bsr FADEDOWNTITLE
  376.  
  377.  move.w #$0201,titleplanes
  378.  
  379.     FILTER
  380.     
  381.  tst.b SHOULDQUIT
  382.  bne QUITTT
  383.  
  384.  bsr RELEASETITLEMEM
  385.  
  386.   
  387. ; jsr LOADBOTPIC
  388.  
  389.   
  390.  clr.b FINISHEDLEVEL
  391.  
  392.  move.w #0,PLR1s_angpos
  393.  move.w #0,PLR2s_angpos
  394.  move.w #0,PLR1_angpos
  395.  move.w #0,PLR2_angpos
  396.  move.b #0,PLR1_GunSelected
  397.  move.b #0,PLR2_GunSelected
  398.  
  399. **************************8
  400.  clr.b NASTY
  401. *************************** 
  402.  
  403.  move.l #MASTERPLAYERONEHEALTH,a0
  404.  move.l #MASTERPLAYERONESHIELD,a1
  405.  move.l #PLAYERONEHEALTH,a2
  406.  move.l #PLAYERONESHIELD,a3
  407.  move.l #PLAYERTWOHEALTH,a4
  408.  move.l #PLAYERTWOSHIELD,a5
  409.  
  410.  REPT 11 
  411.  move.l (a0),(a2)+
  412.  move.l (a0)+,(a4)+
  413.  ENDR
  414.  
  415.  REPT 6 
  416.  move.l (a1),(a3)+
  417.  move.l (a1)+,(a5)+
  418.  ENDR
  419.  
  420. *************************************
  421.  jsr INITQUEUE
  422.  
  423.  move.l #MEMF_CHIP,d1
  424.  move.l #10240*8,d0
  425.  move.l 4.w,a6
  426.  jsr -198(a6)
  427.  move.l d0,scrn
  428.  
  429.  move.l #MEMF_CHIP,d1
  430.  move.l #10240*8,d0
  431.  move.l 4.w,a6
  432.  jsr -198(a6)
  433.  move.l d0,scrn2
  434.  
  435.     move.l    #borderpacked,d0
  436.     moveq    #0,d1
  437.     move.l  scrn,a0
  438.     lea    WorkSpace,a1
  439.     lea    $0,a2
  440.     jsr    unLHA
  441.  
  442.     move.l    #borderpacked,d0
  443.     moveq    #0,d1
  444.     move.l  scrn2,a0
  445.     lea    WorkSpace,a1
  446.     lea    $0,a2
  447.     jsr    unLHA
  448.  
  449. ; move.l #MEMF_CHIP,TYPEOFMEM
  450. ; move.l #bordername,a0
  451. ; move.l #scrn,d0
  452. ; move.l #0,d1
  453. ; jsr QUEUEFILE
  454. ; ifeq CHEESEY
  455. ; move.l #bordername,a0
  456. ; move.l #scrn2,d0
  457. ; move.l #0,d1
  458. ; jsr QUEUEFILE
  459. ; endc 
  460. ; jsr FLUSHQUEUE
  461.  
  462.  ifne CHEESEY
  463.  
  464.  move.l scrn,scrn2
  465.  
  466.  endc
  467.  
  468. ************************************* 
  469.  
  470.     jsr PLAYTHEGAME
  471.     
  472. *************************************
  473.  move.l scrn,a1
  474.  move.l #10240*8,d0
  475.  move.l 4.w,a6
  476.  jsr -210(a6)
  477.  ifeq CHEESEY
  478.  move.l scrn2,a1
  479.  move.l #10240*8,d0
  480.  move.l 4.w,a6
  481.  jsr -210(a6)
  482.  endc
  483. *************************************
  484.  
  485. ; bsr FREEBOTMEM 
  486.  
  487. ; bra QUITTT
  488.  
  489.  tst.b FINISHEDLEVEL
  490.  beq dontusestats
  491.  
  492.  move.l #MASTERPLAYERONEHEALTH,a0
  493.  move.l #MASTERPLAYERONESHIELD,a1
  494.  move.l #PLAYERONEHEALTH,a2
  495.  move.l #PLAYERONESHIELD,a3
  496.  
  497.  REPT 11 
  498.  move.l (a2)+,(a0)+
  499.  ENDR
  500.  
  501.  REPT 6 
  502.  move.l (a3)+,(a1)+
  503.  ENDR
  504.  
  505. dontusestats:
  506.  
  507. ; bsr PASSLINETOGAME
  508. ; bsr GETSTATS
  509.  
  510.  bsr GETTITLEMEM
  511.  bsr CLROPTSCRN
  512.  bsr SETUPTITLESCRN
  513.  
  514.  move.l #TITLESCRNNAME2,TITLESCRNPTR
  515.  bsr LOADTITLESCRN2
  516.  move.w #$7201,titleplanes
  517.  
  518.  move.w #$20,$dff1dc
  519.  move.l #titlecop,$dff080
  520.  move.w #$87c0,$dff000+dmacon
  521.  move.w #$8020,$dff000+dmacon 
  522.  
  523.  move.w #0,FADEVAL
  524.  move.w #31,FADEAMOUNT
  525.  bsr FADEUPTITLE
  526.  
  527.  move.w #23,FADEAMOUNT
  528.  bsr FADEDOWNTITLE 
  529.  
  530. ; IFEQ CD32VER
  531. ; jsr KInt_Init
  532. ; ENDC
  533.  
  534.  bra BACKTOMENU
  535.  
  536. QUITTT:
  537.  
  538.  move.l LEVELDATA,d1
  539.  move.l d1,a1
  540.  move.l #120000,d0
  541.  move.l 4.w,a6
  542.  jsr -210(a6)
  543.  
  544.  move.l TEXTSCRN,d1
  545.  move.l d1,a1
  546.  move.l #10240*2,d0
  547.  move.l 4.w,a6
  548.  jsr -210(a6)
  549.  
  550.  move.l FASTBUFFER,d1    
  551.  move.l #2*320*256,d0
  552.  move.l 4.w,a6
  553.  jsr -210(a6)
  554.  
  555. ; jsr RELEASEWALLMEM
  556.  jsr RELEASESAMPMEM
  557.  jsr RELEASEFLOORMEM
  558.  jsr RELEASEOBJMEM
  559.   
  560.  move.l old,$dff080
  561.  move.l 4.w,a6
  562.  lea VBLANKInt,a1
  563.  moveq #INTB_COPER,d0
  564.  jsr _LVORemIntServer(a6)
  565.  
  566.  move.l 4.w,a6
  567.  lea KEYInt,a1
  568.  moveq #INTB_PORTS,d0
  569.  jsr _LVORemIntServer(a6)
  570.  
  571.  move.w #$f8e,$dff1dc
  572.  
  573.  move.l old,$dff080
  574.  move.w _storeint,d0
  575.  or.w d0,$dff000+intena
  576.  
  577. ; move.l    4.w,a6
  578. ; jsr    _LVOPermit(a6)
  579.  
  580.  
  581.  move.l #0,d0
  582.  
  583.  rts
  584.  
  585. SSTACK: dc.l 0
  586.  
  587. backpicname: dc.b "tkg1:includes/rawbackpacked"
  588.   dc.b 0
  589.  
  590. bordername: dc.b "TKG2:includes/newborderRAW",0
  591.  even
  592. borderpacked: incbin "ab3:includes/newborderPACKED"
  593.  
  594. ; KEY OPTIONS:
  595. CONTROLBUFFER:
  596. turn_left_key:
  597.  dc.b $4f
  598. turn_right_key:
  599.  dc.b $4e
  600. forward_key:
  601.  dc.b $4c
  602. backward_key:
  603.  dc.b $4d
  604. fire_key:
  605.  dc.b $65
  606. operate_key:
  607.  dc.b $40
  608. run_key:
  609.  dc.b $61
  610. force_sidestep_key:
  611.  dc.b $67
  612. sidestep_left_key:
  613.  dc.b $39
  614. sidestep_right_key:
  615.  dc.b $3a
  616. duck_key:
  617.  dc.b $22
  618. look_behind_key:
  619.  dc.b $28
  620. jump_key:
  621.  dc.b $f
  622. look_up_key:
  623.  dc.b 27
  624. look_down_key:
  625.  dc.b 42
  626. centre_view_key:
  627.  dc.b 41
  628. next_weapon_key:
  629.  dc.b 68
  630.  
  631. templeftkey: dc.b 0
  632. temprightkey: dc.b 0
  633. tempslkey: dc.b 0 
  634. tempsrkey: dc.b 0
  635.  
  636.  even 
  637.  
  638. GETSTATS:
  639. ; CHANGE PASSWORD INTO RAW DATA
  640.  
  641.  rts
  642.  
  643.  
  644. SETPLAYERS:
  645.  
  646.  move.w PLOPT,d0
  647.  add.b #'a',d0
  648.  move.b d0,LEVA
  649.  move.b d0,LEVB
  650.  move.b d0,LEVC
  651.  move.b d0,LEVD
  652.  move.b d0,LEVE
  653.  
  654.  cmp.b #'s',mors
  655.  beq SLAVESETUP
  656.  cmp.b #'m',mors
  657.  beq MASTERSETUP
  658.  st NASTY
  659. onepla:
  660.  rts
  661.  
  662. NASTY: dc.w 0
  663.  
  664. MASTERSETUP:
  665.  clr.b NASTY
  666.  move.w PLOPT,d0
  667.  jsr SENDFIRST
  668.  
  669.  move.w Rand1,d0
  670.  jsr SENDFIRST
  671.  
  672.  bsr TWOPLAYER
  673.  rts
  674.  
  675. SLAVESETUP:
  676.  CLR.B NASTY
  677.  jsr RECFIRST
  678.  move.w d0,PLOPT
  679.  add.b #'a',d0
  680.  move.b d0,LEVA
  681.  move.b d0,LEVB
  682.  move.b d0,LEVC
  683.  move.b d0,LEVD
  684.  move.b d0,LEVE
  685.  
  686.  jsr RECFIRST
  687.  move.w d0,Rand1
  688.  bsr TWOPLAYER
  689.  
  690.  
  691.  rts
  692.      
  693. ********************************************************
  694.  
  695. ASKFORDISK:
  696.  lea RVAL1+300(pc),a0
  697.  lea RVAL2+900(pc),a1
  698.  PRSDD
  699.  move.w #10,OptScrn
  700.  bsr DRAWOPTSCRN
  701.  
  702. ProtChkNLev1:
  703. .wtrel:
  704.  btst #7,$bfe001
  705.  beq.s .wtrel
  706.  
  707. wtclick:
  708.  add.w #$235,-300(a0)
  709.  add.w #$4533,-900(a0)
  710.  btst #6,$bfe001
  711.  bne.s wtclick
  712.  
  713.  rts
  714.  
  715. CLRSPRITES: 
  716.  move.l #nullspr,d0
  717.  move.w d0,tsp0l
  718.  move.w d0,tsp1l
  719.  move.w d0,tsp2l
  720.  move.w d0,tsp3l
  721.  move.w d0,tsp4l
  722.  move.w d0,tsp5l
  723.  move.w d0,tsp6l
  724.  move.w d0,tsp7l
  725.  swap d0
  726.  move.w d0,tsp0h
  727.  move.w d0,tsp1h
  728.  move.w d0,tsp2h
  729.  move.w d0,tsp3h
  730.  move.w d0,tsp4h
  731.  move.w d0,tsp5h
  732.  move.w d0,tsp6h
  733.  move.w d0,tsp7h 
  734.  rts
  735.  
  736. ********************************************************
  737.  
  738. READMAINMENU:
  739.  
  740.  
  741.  move.b #'n',mors
  742.  
  743.  move.w MAXLEVEL,d0
  744.  
  745.  move.l #CURRENTLEVELLINE,a1
  746.  muls #40,d0
  747.  move.l LINKFILE,a0
  748.  add.l #LevelName,a0
  749.  add.l d0,a0
  750.  bsr PUTINLINE
  751.  
  752. ; Stay here until 'play game' is selected.
  753.  
  754.  move.w #0,OptScrn
  755.  bsr DRAWOPTSCRN
  756.  move.w #0,OPTNUM
  757.  
  758.  bsr HIGHLIGHT
  759.  
  760.  
  761.  
  762.  bsr WAITREL
  763. .rdlop:
  764.  
  765.  bsr CHECKMENU
  766.  tst.w d0
  767.  blt.s .rdlop
  768.  
  769.  
  770. ; tst.w d0
  771. ; bne.s .nonextlev
  772. ; move.w LEVELSELECTED,d0
  773. ; add.w #1,d0
  774. ; cmp.w MAXLEVEL,d0
  775. ; blt .nowrap
  776. ; moveq #0,d0
  777. ;.nowrap:
  778. ; and.w #$f,d0
  779. ; move.w d0,LEVELSELECTED
  780. ; move.l #CURRENTLEVELLINE,a1
  781. ; muls #40,d0
  782. ; move.l #LEVEL_OPTS,a0
  783. ; add.l d0,a0
  784. ; bsr PUTINLINE
  785. ; bsr JUSTDRAWIT
  786. ; bra .rdlop
  787.  
  788. .nonextlev:
  789.  
  790.  cmp.w #1,d0
  791.  bne .noopt
  792.  
  793.  bra MASTERMENU
  794.  
  795. .noopt:
  796.  
  797. ; cmp.w #5,d0
  798. ; bne.s .noqui
  799. ; st SHOULDQUIT
  800. ; bra playgame
  801. ;.noqui
  802.  
  803.  cmp.w #2,d0
  804.  beq playgame
  805.  
  806.  cmp.w #3,d0
  807.  bne .nocontrol
  808.  
  809.  bsr CHANGECONTROLS
  810.  
  811.  move.w #0,OptScrn
  812.  bsr DRAWOPTSCRN
  813.  move.w #0,OPTNUM
  814.  
  815.  bsr HIGHLIGHT
  816.  
  817.  bsr WAITREL
  818.  bra .rdlop
  819.  
  820. .nocontrol:
  821.  
  822.  cmp.w #4,d0
  823.  bne .nocred
  824.  bsr SHOWCREDITS
  825.  move.w #0,OptScrn
  826.  bsr DRAWOPTSCRN
  827.  move.w #1,OPTNUM
  828.  
  829.  bsr HIGHLIGHT
  830.  
  831.  bsr WAITREL
  832.  bra .rdlop
  833.  
  834. .nocred:
  835.  
  836.  cmp.w #5,d0
  837.  bne .noload
  838.  
  839.  bsr WAITREL
  840.  
  841.  jsr LOADPOSITION
  842.  
  843.  move.w #0,OptScrn
  844.  bsr DRAWOPTSCRN
  845.  move.w #1,OPTNUM
  846.  
  847.  bsr HIGHLIGHT
  848.  
  849.  bsr WAITREL
  850.  bra .rdlop
  851.  
  852. .noload:
  853.  cmp.w #6,d0
  854.  bne playgame
  855.  bsr WAITREL
  856.  
  857.  jsr SAVEPOSITION
  858.  
  859.  move.w #0,OptScrn
  860.  bsr DRAWOPTSCRN
  861.  move.w #1,OPTNUM
  862.  
  863.  bsr HIGHLIGHT
  864.  
  865.  bsr WAITREL
  866.  bra .rdlop
  867.  
  868.  
  869. ;
  870. ; move.l #PASSWORDLINE+12,a0
  871. ; moveq #15,d2
  872. ;.clrline:
  873. ; move.b #32,(a0)+
  874. ; dbra d2,.clrline 
  875. ; move.w #0,OptScrn
  876. ; bsr DRAWOPTSCRN
  877. ;
  878. ; IFEQ CD32VER
  879. ; clr.b lastpressed
  880. ; move.l #PASSWORDLINE+12,a0
  881. ; move.w #0,d1
  882. ;.ENTERPASS:
  883. ; tst.b lastpressed
  884. ; beq .ENTERPASS
  885. ; move.b lastpressed,d2
  886. ; move.b #0,lastpressed
  887. ; move.l #KVALTOASC,a1
  888. ; cmp.l #'<-- ',(a1,d2.w*4)
  889. ; bne .nodel
  890. ;
  891. ; tst.b d1
  892. ; beq .nodel
  893. ;
  894. ; subq #1,d1
  895. ; move.b #32,-(a0)
  896. ; movem.l d0-d7/a0-a6,-(a7)
  897. ; bsr JUSTDRAWIT
  898. ; movem.l (a7)+,d0-d7/a0-a6
  899. ; bra .ENTERPASS
  900. ;
  901. ;.nodel:
  902. ; cmp.l #'RTN ',(a1,d2.w*4)
  903. ; beq .FORGETIT
  904. ; cmp.l #'ESC ',(a1,d2.w*4)
  905. ; beq .FORGETIT
  906. ; move.b 1(a1,d2.w*4),d2
  907. ; cmp.b #65,d2
  908. ; blt .ENTERPASS
  909. ; cmp.b #'Z',d2
  910. ; bgt .ENTERPASS
  911. ; move.b d2,(a0)+
  912. ; move.w #0,OptScrn
  913. ; movem.l d0-d7/a0-a6,-(a7)
  914. ; bsr JUSTDRAWIT
  915. ; movem.l (a7)+,d0-d7/a0-a6
  916. ; add.w #1,d1
  917. ; cmp.w #16,d1
  918. ; blt .ENTERPASS
  919. ;
  920. ; ENDC
  921. ; IFNE CD32VER
  922. ; move.l #PASSWORDLINE+12,a0
  923. ; move.w #15,d0
  924. ;.ENTERPASS:
  925. ; bsr GETACHAR
  926. ; dbra d0,.ENTERPASS
  927. ; ENDC
  928. ;
  929. ; bsr PASSLINETOGAME
  930. ; tst.w d0
  931. ; bne .FORGETIT
  932. ; bsr GETSTATS
  933. ; move.w MAXLEVEL,d0
  934. ; move.l #CURRENTLEVELLINE,a1
  935. ; muls #40,d0
  936. ; move.l #LEVEL_OPTS,a0
  937. ; add.l d0,a0
  938. ; bsr PUTINLINE
  939. ;
  940. ;.FORGETIT:
  941. ; bsr WAITREL
  942. ; bsr CALCPASSWORD
  943. ;
  944. ; move.w #0,OptScrn
  945. ; bsr DRAWOPTSCRN
  946. ;
  947. ; move.w #1,OPTNUM
  948. ;
  949. ; bsr HIGHLIGHT
  950. ;
  951. ; bra .rdlop 
  952.  
  953. playgame:
  954.  move.w MAXLEVEL,PLOPT
  955.  rts
  956.  
  957. SHOULDQUIT: dc.w 0
  958.  
  959. LEVELSELECTED:
  960.  dc.w 0
  961.  
  962.  IFNE CD32VER
  963. GETACHAR:
  964.  moveq #0,d7
  965.  move.b #'A',(a0)
  966.  movem.l d0-d7/a0-a6,-(a7)
  967.  jsr JUSTDRAWIT
  968.  movem.l (a7)+,d0-d7/a0-a6
  969.  
  970. .wtnum:
  971.  btst #1,$dff00c
  972.  sne d1
  973.  btst #1,$dff00d
  974.  sne d2
  975.  btst #0,$dff00c
  976.  sne d3
  977.  btst #0,$dff00d
  978.  sne d4
  979.  
  980.  eor.b d1,d3
  981.  eor.b d2,d4
  982.  
  983.  tst.b d1
  984.  beq.s .NODELETE
  985.  cmp.w #15,d0
  986.  beq.s .NODELETE
  987.  move.b #32,(a0)
  988.  subq #1,a0
  989.  addq #1,d0
  990.  move.b (a0),d7
  991.  sub.b #'A',d7
  992.  movem.l d0-d7/a0-a6,-(a7)
  993.  jsr JUSTDRAWIT
  994.  movem.l (a7)+,d0-d7/a0-a6
  995.  jsr WAITFORNOPRESS
  996.  bra .wtnum
  997. .NODELETE
  998.  
  999.  tst.b d4
  1000.  bne.s .PREVNUM
  1001.  tst.b d3
  1002.  bne.s .NEXTNUM
  1003.  btst #7,$bfe001
  1004.  bne.s .wtnum
  1005.  addq #1,a0
  1006.  jsr WAITFORNOPRESS
  1007.  rts
  1008.  
  1009. .PREVNUM:
  1010.  subq #1,d7
  1011.  bge.s .nonegg
  1012.  moveq #15,d7
  1013. .nonegg:
  1014.  move.b d7,d1
  1015.  add.b #'A',d1
  1016.  move.b d1,(a0)
  1017.  movem.l d0-d7/a0-a6,-(a7)
  1018.  jsr JUSTDRAWIT
  1019.  movem.l (a7)+,d0-d7/a0-a6
  1020.  
  1021.  jsr WAITFORNOPRESS
  1022.  
  1023.  bra .wtnum
  1024.  
  1025. .NEXTNUM:
  1026.  addq #1,d7
  1027.  cmp.w #15,d7
  1028.  ble.s .nobigg
  1029.  moveq #0,d7
  1030. .nobigg:
  1031.  move.b d7,d1
  1032.  add.b #'A',d1
  1033.  move.b d1,(a0)
  1034.  movem.l d0-d7/a0-a6,-(a7)
  1035.  jsr JUSTDRAWIT
  1036.  movem.l (a7)+,d0-d7/a0-a6
  1037.  jsr WAITFORNOPRESS
  1038.  bra .wtnum
  1039.  rts
  1040.  ENDC
  1041.  
  1042.  
  1043. MASTERMENU:
  1044.  
  1045.  move.b #'m',mors
  1046.  
  1047.  move.w #0,LEVELSELECTED
  1048.  
  1049.  move.w #0,d0 
  1050.  move.l #CURRENTLEVELLINEM,a1
  1051.  muls #40,d0
  1052.  move.l LINKFILE,a0
  1053.  add.l #LevelName,a0
  1054.  add.l d0,a0
  1055.  bsr PUTINLINE
  1056.  
  1057. ; Stay here until 'play game' is selected.
  1058.  
  1059.  move.w #4,OptScrn
  1060.  bsr DRAWOPTSCRN
  1061.  move.w #1,OPTNUM
  1062.  
  1063.  bsr HIGHLIGHT
  1064.  
  1065.  bsr WAITREL
  1066. .rdlop:
  1067.  bsr CHECKMENU
  1068.  tst.w d0
  1069.  blt.s .rdlop
  1070.  bsr WAITREL
  1071.  
  1072.  cmp.w #1,d0
  1073.  bne.s .nonextlev
  1074.  
  1075.  move.w LEVELSELECTED,d0
  1076.  add.w #1,d0
  1077.  cmp.w MAXLEVEL,d0
  1078.  blt .nowrap
  1079.  moveq #0,d0
  1080. .nowrap:
  1081. ; and.w #$f,d0
  1082.  move.w d0,LEVELSELECTED
  1083.  move.l #CURRENTLEVELLINEM,a1
  1084.  muls #40,d0
  1085.  move.l LINKFILE,a0
  1086.  add.l #LevelName,a0
  1087.  add.l d0,a0
  1088.  bsr PUTINLINE
  1089.  bsr JUSTDRAWIT
  1090.  bra .rdlop
  1091.  
  1092. .nonextlev:
  1093.  
  1094.  cmp.w #2,d0
  1095.  beq .playgame
  1096.  
  1097.  cmp.w #0,d0
  1098.  bne .noopt
  1099.  
  1100.  bra SLAVEMENU
  1101.  
  1102. .noopt:
  1103.  
  1104.  cmp.w #3,d0
  1105.  bne .nocontrol
  1106.  
  1107.  bsr CHANGECONTROLS
  1108.  
  1109.  move.w #4,OptScrn
  1110.  bsr DRAWOPTSCRN
  1111.  move.w #0,OPTNUM
  1112.  
  1113.  bsr HIGHLIGHT
  1114.  
  1115.  bsr WAITREL
  1116.  bra .rdlop
  1117.  
  1118. .nocontrol:
  1119.  
  1120. .playgame
  1121.  
  1122.  move.w LEVELSELECTED,PLOPT
  1123.  rts
  1124.  
  1125. SLAVEMENU:
  1126.  
  1127.  move.b #'s',mors
  1128.  
  1129. ; Stay here until 'play game' is selected.
  1130.  
  1131.  move.w #5,OptScrn
  1132.  bsr DRAWOPTSCRN
  1133.  move.w #1,OPTNUM
  1134.  
  1135.  bsr HIGHLIGHT
  1136.  
  1137.  bsr WAITREL
  1138. .rdlop:
  1139.  bsr CHECKMENU
  1140.  tst.w d0
  1141.  blt.s .rdlop
  1142.  bsr WAITREL
  1143.  
  1144.  cmp.w #1,d0
  1145.  beq .playgame
  1146.  
  1147.  cmp.w #0,d0
  1148.  bne .noopt
  1149.  
  1150.  bra READMAINMENU
  1151.  
  1152. .noopt:
  1153.  
  1154.  cmp.w #2,d0
  1155.  bne .nocontrol
  1156.  
  1157.  bsr CHANGECONTROLS
  1158.  
  1159.  move.w #5,OptScrn
  1160.  bsr DRAWOPTSCRN
  1161.  move.w #0,OPTNUM
  1162.  
  1163.  bsr HIGHLIGHT
  1164.  
  1165.  bsr WAITREL
  1166.  bra .rdlop
  1167.  
  1168. .nocontrol:
  1169. .playgame:
  1170.  
  1171.  rts
  1172.  
  1173. STATBACK: ds.w 34
  1174.  
  1175. TWOPLAYER:
  1176.  
  1177.  move.w #200,PLAYERONEHEALTH
  1178.  move.w #200,PLAYERTWOHEALTH
  1179.  
  1180.  st.b PLAYERONEGUNS+1
  1181.  st.b PLAYERONEGUNS+3
  1182.  st.b PLAYERONEGUNS+5
  1183.  st.b PLAYERONEGUNS+7
  1184.  st.b PLAYERONEGUNS+9
  1185.  st.b PLAYERONEGUNS+11
  1186.  st.b PLAYERONEGUNS+13
  1187.  st.b PLAYERONEGUNS+15
  1188.  st.b PLAYERONEGUNS+17
  1189.  st.b PLAYERONEGUNS+19
  1190.  
  1191.  st.b PLAYERTWOGUNS+1
  1192.  st.b PLAYERTWOGUNS+3
  1193.  st.b PLAYERTWOGUNS+5
  1194.  st.b PLAYERTWOGUNS+7
  1195.  st.b PLAYERTWOGUNS+9
  1196.  st.b PLAYERTWOGUNS+11
  1197.  st.b PLAYERTWOGUNS+13
  1198.  st.b PLAYERTWOGUNS+15
  1199.  st.b PLAYERTWOGUNS+17
  1200.  st.b PLAYERTWOGUNS+19
  1201.  
  1202.  move.l #PLAYERONEAMMO,a0
  1203.  move.l #PLAYERTWOAMMO,a1
  1204.  move.w #19,d1
  1205. .putinvals
  1206.  jsr GetRand
  1207.  and.w #63,d0
  1208.  add.w #5,d0
  1209.  move.w d0,(a0)+
  1210.  move.w d0,(a1)+
  1211.  dbra d1,.putinvals
  1212.  
  1213.  rts
  1214.  
  1215.  move.w #0,OldEnergy
  1216.  move.w #127,Energy
  1217.  jsr EnergyBar
  1218.  
  1219.  move.w #63,OldAmmo
  1220.  move.w #0,Ammo
  1221.  jsr AmmoBar
  1222.  move.w #0,OldAmmo
  1223.  
  1224.  move.b #0,PLR1_GunSelected
  1225.  
  1226.  move.b #0,PLR2_GunSelected
  1227.  rts
  1228.  
  1229. newdum:
  1230.  rts
  1231.  
  1232. DEFAULTGAME:
  1233.  move.w #0,MAXLEVEL
  1234.  
  1235.  move.l #MASTERPLAYERONEHEALTH,a0
  1236.  move.l #MASTERPLAYERONESHIELD,a1
  1237.  move.l #0,(a0)+
  1238.  move.l #0,(a0)+
  1239.  move.l #0,(a0)+
  1240.  move.l #0,(a0)+
  1241.  move.l #0,(a0)+
  1242.  move.l #0,(a0)+
  1243.  move.l #0,(a0)+
  1244.  move.l #0,(a0)+
  1245.  move.l #0,(a0)+
  1246.  move.l #0,(a0)+
  1247.  move.l #0,(a0)+
  1248.  
  1249.  move.l #0,(a1)+
  1250.  move.l #0,(a1)+
  1251.  move.l #0,(a1)+
  1252.  move.l #0,(a1)+
  1253.  move.l #0,(a1)+
  1254.  move.l #0,(a1)+
  1255.  
  1256.  move.w #200,MASTERPLAYERONEHEALTH
  1257.  move.w #$ff,MASTERPLAYERONEGUNS
  1258.  
  1259.  move.l LINKFILE,a5
  1260.  add.l #GunBulletTypes,a5
  1261.  move.w (a5),d0
  1262.  
  1263.  move.l #MASTERPLAYERONEAMMO,a5
  1264.  move.w #20,(a5,d0.w*2)
  1265.  
  1266.  rts
  1267.  
  1268. CHKPROT: dc.w 0
  1269.  
  1270. GETPARITY:
  1271.  move.w #6,d3
  1272. .calcparity:
  1273.  btst d3,d0
  1274.  beq.s .nochange
  1275.  bchg #7,d0
  1276. .nochange:
  1277.  dbra d3,.calcparity
  1278.  rts
  1279.  
  1280. CHECKPARITY:
  1281.  move.w #6,d3
  1282.  move.b #$0,d2
  1283. .calcparity:
  1284.  btst d3,d0
  1285.  beq.s .nochange
  1286.  bchg #7,d2
  1287. .nochange:
  1288.  dbra d3,.calcparity
  1289.  move.b d0,d1
  1290.  and.b #$80,d1
  1291.  eor.b d1,d2
  1292.  sne.s d5
  1293.  rts
  1294.  
  1295. CALCPASSWORD:
  1296.  rts
  1297.  
  1298. PASSLINETOGAME:
  1299.  rts
  1300.  
  1301. illega:
  1302.  
  1303.  move.w #-1,d0
  1304.  
  1305.  rts
  1306.  
  1307. PASSBUFFER:
  1308.  ds.b 8
  1309.  
  1310. CHECKBUFFER: ds.b 8
  1311.  
  1312. PASS:
  1313.  ds.b 16
  1314.  
  1315. **************************************************
  1316.  
  1317. CHANGECONTROLS:
  1318.  
  1319.  move.w #6,OptScrn
  1320.  bsr DRAWOPTSCRN
  1321.  move.w #0,OPTNUM
  1322.  bsr HIGHLIGHT
  1323.  bsr WAITREL
  1324.  
  1325. .rdlop:
  1326.  bsr CHECKMENU
  1327.  tst.w d0
  1328.  blt.s .rdlop
  1329.  
  1330.  cmp.w #17,d0
  1331.  beq .backtomain
  1332.  
  1333.  move.l #KEY_LINES,a0
  1334.  move.w d0,d1
  1335.  muls #40,d1
  1336.  add.l d1,a0
  1337.  add.w #32,a0
  1338.  move.l #$20202020,(a0)
  1339.  movem.l d0/a0,-(a7)
  1340.  bsr JUSTDRAWIT
  1341.  movem.l (a7)+,d0/a0 
  1342.  
  1343.  clr.b lastpressed
  1344.  
  1345. .wtkey
  1346.  tst.b lastpressed
  1347.  beq .wtkey
  1348.  
  1349.  move.l #CONTROLBUFFER,a1
  1350.  moveq #0,d1
  1351.  move.b lastpressed,d1
  1352.  move.b d1,(a1,d0.w)
  1353.  move.l #KVALTOASC,a1
  1354.  move.l (a1,d1.w*4),(a0)
  1355.  bsr JUSTDRAWIT
  1356.  bsr WAITREL
  1357.  bra .rdlop
  1358.  
  1359. .backtomain:
  1360.  rts
  1361.  
  1362. **************************************************
  1363.  
  1364.  
  1365. MAXLEVEL: dc.w 0
  1366.  
  1367. SHOWCREDITS:
  1368.  move.w #2,OptScrn
  1369.  bsr DRAWOPTSCRN
  1370.  move.w #0,OPTNUM
  1371.  bsr HIGHLIGHT
  1372.  
  1373.  bsr WAITREL
  1374.  
  1375. .rdlop:
  1376.  bsr CHECKMENU
  1377.  tst.w d0
  1378.  blt.s .rdlop
  1379.  
  1380.  bra READMAINMENU
  1381.  
  1382. HELDDOWN:
  1383.  dc.w 0
  1384.  
  1385. WAITREL:
  1386.  
  1387.  movem.l d0/d1/d2/d3,-(a7)
  1388.  
  1389.  move.l #KeyMap,a5
  1390. WAITREL2:
  1391.  btst #7,$bfe001
  1392.  beq.s WAITREL2
  1393.  
  1394.  IFEQ CD32VER
  1395.  tst.b $40(a5)
  1396.  bne.s WAITREL2
  1397.  tst.b $44(a5)
  1398.  bne.s WAITREL2
  1399.  tst.b $4c(a5)
  1400.  bne.s WAITREL2
  1401.  tst.b $4d(a5)
  1402.  bne.s WAITREL2
  1403.  ENDC
  1404.  
  1405.  btst #1,$dff00c
  1406.  sne d0
  1407.  btst #1,$dff00d
  1408.  sne d1
  1409.  btst #0,$dff00c
  1410.  sne d2
  1411.  btst #0,$dff00d
  1412.  sne d3
  1413.  
  1414.  eor.b d0,d2
  1415.  eor.b d1,d3
  1416.  tst.b d2
  1417.  bne.s WAITREL2
  1418.  tst.b d3
  1419.  bne.s WAITREL2
  1420.  
  1421.  
  1422.  movem.l (a7)+,d0/d1/d2/d3
  1423.  rts
  1424.  
  1425. PUTINLINE:
  1426.  moveq #39,d0
  1427. pill
  1428.  move.b (a0)+,(a1)+
  1429.  dbra d0,pill
  1430.  rts
  1431.  
  1432. CHECKMENU:
  1433.  btst #1,$dff00c
  1434.  sne d0
  1435.  btst #1,$dff00d
  1436.  sne d1
  1437.  btst #0,$dff00c
  1438.  sne d2
  1439.  btst #0,$dff00d
  1440.  sne d3
  1441.  
  1442.  eor.b d0,d2
  1443.  eor.b d1,d3
  1444.  
  1445.  move.l #KeyMap,a5
  1446.  move.b $4c(a5),d0
  1447.  move.b $4d(a5),d1
  1448.  or.b d1,d3
  1449.  or.b d0,d2
  1450.  
  1451.  move.w OptScrn,d0
  1452.  move.l #MENUDATA,a0
  1453.  move.l 4(a0,d0.w*8),a0    ; opt data
  1454.  
  1455.  move.w OPTNUM,d0
  1456.  
  1457.  tst.b d2
  1458.  beq.s NOPREV
  1459.  
  1460.  
  1461.  sub.w #1,d0
  1462.  bge.s NOPREV
  1463.  
  1464.  move.w #0,d0 
  1465.  
  1466. NOPREV:
  1467.  
  1468.  tst.b d3
  1469.  beq.s NONEXT
  1470.  
  1471.  bsr WAITREL
  1472.  
  1473.  add.w #1,d0
  1474.  tst.w (a0,d0.w*8)
  1475.  bge.s NONEXT
  1476.  
  1477.  subq #1,d0
  1478.  
  1479. NONEXT:
  1480.  
  1481.  cmp.w OPTNUM,d0
  1482.  beq.s .nochange
  1483.  
  1484.  bsr HIGHLIGHT
  1485.  move.w d0,OPTNUM
  1486.  bsr HIGHLIGHT
  1487.  bsr WAITREL
  1488.  
  1489. .nochange:
  1490.  
  1491.  move.w #-1,d0
  1492.  
  1493.  btst #7,$bfe001
  1494.  beq.s select
  1495.  move.b $40(a5),d1
  1496.  or.b $44(a5),d1
  1497.  tst.b d1
  1498.  beq.s noselect
  1499.  
  1500. select:
  1501.  bsr WAITREL
  1502.  move.w OPTNUM,d0
  1503. noselect:
  1504.  
  1505.  rts
  1506.  
  1507. HIGHLIGHT:
  1508.  
  1509.  SAVEREGS
  1510.  
  1511.  move.w OptScrn,d0
  1512.  move.l #MENUDATA,a0
  1513.  move.l 4(a0,d0.w*8),a0
  1514.  move.w OPTNUM,d0
  1515.  lea (a0,d0.w*8),a0
  1516.  move.w (a0)+,d0    ;left
  1517.  move.w (a0)+,d1    ;top
  1518.  move.w (a0)+,d2    ;width
  1519.  
  1520.  muls #16*8,d1
  1521.  move.l OPTSPRADDR,a1
  1522.  add.w d1,a1
  1523.  add.w #8+16,a1
  1524.  move.l #SCRTOSPR2,a5
  1525.  adda.w d0,a5
  1526.  adda.w d0,a5
  1527.  
  1528. NOTLOP:
  1529.  
  1530.  move.w (a5)+,d3
  1531.  lea (a1,d3.w),a2
  1532.  not.b (a2)
  1533.  not.b 16(a2)
  1534.  not.b 32(a2)
  1535.  not.b 48(a2)
  1536.  not.b 64(a2)
  1537.  not.b 80(a2)
  1538.  not.b 96(a2)
  1539.  not.b 112(a2)
  1540.  not.b 128(a2)
  1541.  subq #1,d2
  1542.  bgt.s NOTLOP
  1543.  
  1544.  GETREGS
  1545.  rts
  1546.  
  1547. SCRTOSPR2:
  1548. val SET 0
  1549.  REPT 6
  1550.  dc.w val+0
  1551.  dc.w val+1
  1552.  dc.w val+2
  1553.  dc.w val+3
  1554.  dc.w val+4
  1555.  dc.w val+5
  1556.  dc.w val+6
  1557.  dc.w val+7
  1558. val SET val+258*16
  1559.  ENDR
  1560.  
  1561. CLROPTSCRN:
  1562.  
  1563.  move.l #$2cdfea,d0
  1564.  move.w (a4,d0.l),d0
  1565.  add.w d0,RVAL2
  1566.  
  1567.  move.l OPTSPRADDR,a0
  1568.  lea 16(a0),a1
  1569.  lea 16+(258*16)(a0),a2
  1570.  lea 16+(258*16*2)(a0),a3
  1571.  lea 16+(258*16*3)(a0),a4
  1572.  lea 258*16(a4),a0
  1573.  
  1574.  move.w #256,d0
  1575.  moveq #0,d1
  1576. CLRLOP:
  1577.  move.l d1,(a0)+
  1578.  move.l d1,(a0)+
  1579.  move.l d1,(a0)+
  1580.  move.l d1,(a0)+
  1581.  move.l d1,(a1)+
  1582.  move.l d1,(a1)+
  1583.  move.l d1,(a1)+
  1584.  move.l d1,(a1)+
  1585.  move.l d1,(a2)+
  1586.  move.l d1,(a2)+
  1587.  move.l d1,(a2)+
  1588.  move.l d1,(a2)+
  1589.  move.l d1,(a3)+
  1590.  move.l d1,(a3)+
  1591.  move.l d1,(a3)+
  1592.  move.l d1,(a3)+
  1593.  move.l d1,(a4)+
  1594.  move.l d1,(a4)+
  1595.  move.l d1,(a4)+
  1596.  move.l d1,(a4)+
  1597.  dbra d0,CLRLOP
  1598.  
  1599.  move.l OPTSPRADDR,a0
  1600.  move.w #44*256+64,(a0)
  1601.  move.w #44*256+2,8(a0)
  1602.  add.l #258*16,a0
  1603.  
  1604.  move.w #44*256+96,(a0)
  1605.  move.w #44*256+2,8(a0)
  1606.  add.l #258*16,a0
  1607.  
  1608.  move.w #44*256+128,(a0)
  1609.  move.w #44*256+2,8(a0)
  1610.  add.l #258*16,a0
  1611.  
  1612.  move.w #44*256+160,(a0)
  1613.  move.w #44*256+2,8(a0)
  1614.  add.l #258*16,a0
  1615.  
  1616.  move.w #44*256+192,(a0)
  1617.  move.w #44*256+2,8(a0)
  1618.  
  1619.  rts
  1620.  
  1621. DRAWOPTSCRN:
  1622.  
  1623.  bsr CLROPTSCRN
  1624.  
  1625. JUSTDRAWIT:
  1626.  
  1627.  move.l #font,a0
  1628.  move.l #MENUDATA,a1
  1629.  move.w OptScrn,d0
  1630.  move.l (a1,d0.w*8),a1
  1631.  
  1632.  move.l OPTSPRADDR,a3
  1633.  add.l #16,a3
  1634.  moveq #0,d2
  1635.  
  1636.  move.w #31,d0
  1637. linelop:
  1638.  move.w #39,d1
  1639.  move.l #SCRTOSPR,a4
  1640.  move.l a3,a2
  1641. charlop:
  1642.  move.b (a1)+,d2
  1643.  lea (a0,d2.w*8),a5
  1644.  move.b (a5)+,(a2)
  1645.  move.b (a5)+,16(a2)
  1646.  move.b (a5)+,32(a2)
  1647.  move.b (a5)+,48(a2)
  1648.  move.b (a5)+,64(a2)
  1649.  move.b (a5)+,80(a2)
  1650.  move.b (a5)+,96(a2)
  1651.  move.b (a5),112(a2)
  1652.  add.w (a4)+,a2
  1653.  dbra d1,charlop
  1654.  add.w #16*8,a3
  1655.  dbra d0,linelop
  1656.  
  1657.  rts
  1658.   
  1659. SCRTOSPR:
  1660.  dc.w 1,1,1,1,1,1,1,258*16-7
  1661.  dc.w 1,1,1,1,1,1,1,258*16-7
  1662.  dc.w 1,1,1,1,1,1,1,258*16-7
  1663.  dc.w 1,1,1,1,1,1,1,258*16-7
  1664.  dc.w 1,1,1,1,1,1,1,258*16-7
  1665.  dc.w 1,1,1,1,1,1,1,258*16-7
  1666.   
  1667. OPTNUM: dc.w 0
  1668. OptScrn: dc.w 0
  1669.  
  1670. SAVEGAMENAME: dc.b "tkg2:boot.dat",0
  1671.  even
  1672.  
  1673. SAVEGAMEPOS: dc.l 0
  1674. SAVEGAMELEN: dc.l 0
  1675.  
  1676. LOADPOSITION: 
  1677.  
  1678.  move.l #SAVEGAMENAME,a0
  1679.  move.l #SAVEGAMEPOS,d0
  1680.  move.l #SAVEGAMELEN,d1
  1681.  jsr INITQUEUE
  1682.  jsr QUEUEFILE
  1683.  jsr FLUSHQUEUE
  1684.  
  1685.  move.l SAVEGAMEPOS,a2    ; address of first saved game.
  1686.  
  1687.  move.l #LSLOTA,a4
  1688.  
  1689.  move.l a2,a3
  1690.  move.w #5,d7
  1691. .findlevs:
  1692.  
  1693.  move.l a4,a1
  1694.  move.w (a3),d1
  1695.  muls #40,d1
  1696.  move.l LINKFILE,a0
  1697.  add.l #LevelName,a0
  1698.  add.l d1,a0
  1699.  jsr PUTINLINE
  1700.  add.l #80,a4
  1701.  add.w #2+(22*2)+(12*2),a3
  1702.  
  1703.  dbra d7,.findlevs
  1704.  
  1705.  move.w #8,OptScrn
  1706.  move.w #0,OPTNUM
  1707.  
  1708.  bsr DRAWOPTSCRN
  1709.  bsr HIGHLIGHT
  1710.  bsr WAITREL
  1711.  
  1712. .rdlop:
  1713.  bsr CHECKMENU
  1714.  tst.w d0
  1715.  blt.s .rdlop
  1716.  
  1717.  cmp.w #6,d0
  1718.  beq.s .noload
  1719.  
  1720.  move.l SAVEGAMEPOS,a0
  1721.  muls #2+(22*2)+(12*2),d0
  1722.  add.l d0,a0
  1723.  
  1724.  move.l #MASTERPLAYERONEHEALTH,a1
  1725.  move.w (a0)+,MAXLEVEL
  1726.  
  1727.  REPT 11
  1728.  move.l (a0)+,(a1)+
  1729.  ENDR
  1730.  REPT 6
  1731.  move.l (a0)+,(a1)+
  1732.  ENDR
  1733.  
  1734.  move.w MAXLEVEL,d0
  1735.  move.l #CURRENTLEVELLINE,a1
  1736.  muls #40,d0
  1737.  move.l LINKFILE,a0
  1738.  add.l #LevelName,a0
  1739.  add.l d0,a0
  1740.  bsr PUTINLINE
  1741.  
  1742. .noload:
  1743.  
  1744.  move.l SAVEGAMEPOS,a1
  1745.  move.l SAVEGAMELEN,d0
  1746.  CALLEXEC FreeMem
  1747.  
  1748.  rts
  1749.  
  1750. SAVEPOSITION:
  1751.  
  1752.  
  1753.  move.l #SAVEGAMENAME,a0
  1754.  move.l #SAVEGAMEPOS,d0
  1755.  move.l #SAVEGAMELEN,d1
  1756.  jsr INITQUEUE
  1757.  jsr QUEUEFILE
  1758.  jsr FLUSHQUEUE
  1759.  
  1760.  move.l SAVEGAMEPOS,a2    ; address of first saved game.
  1761.  
  1762.  move.l #SSLOTA,a4
  1763.  
  1764.  move.l a2,a3
  1765.  move.w #5,d7
  1766. .findlevs:
  1767.  
  1768.  move.l a4,a1
  1769.  move.w (a3),d1
  1770.  muls #40,d1
  1771.  move.l LINKFILE,a0
  1772.  add.l #LevelName,a0
  1773.  add.l d1,a0
  1774.  jsr PUTINLINE
  1775.  add.l #80,a4
  1776.  add.w #2+(22*2)+(12*2),a3
  1777.  
  1778.  dbra d7,.findlevs
  1779.  
  1780.  move.w #9,OptScrn
  1781.  move.w #0,OPTNUM
  1782.  
  1783.  bsr DRAWOPTSCRN
  1784.  bsr HIGHLIGHT
  1785.  bsr WAITREL
  1786.  
  1787. .rdlop:
  1788.  bsr CHECKMENU
  1789.  tst.w d0
  1790.  blt.s .rdlop
  1791.  
  1792.  cmp.w #6,d0
  1793.  beq .nosave
  1794.  
  1795.  move.l SAVEGAMEPOS,a0
  1796.  muls #2+(22*2)+(12*2),d0
  1797.  add.l d0,a0
  1798.  
  1799.  move.l #MASTERPLAYERONEHEALTH,a1
  1800.  move.w MAXLEVEL,(a0)+
  1801.  
  1802.  REPT 11
  1803.  move.l (a1)+,(a0)+
  1804.  ENDR
  1805.  REPT 6
  1806.  move.l (a1)+,(a0)+
  1807.  ENDR
  1808.   
  1809.  move.l old,$dff080
  1810.  move.w #$8020,$dff000+intena
  1811.  
  1812.  move.l _IntuitionBase,a6
  1813.  jsr _LVORethinkDisplay(a6)
  1814.  
  1815.  move.l doslib,a6
  1816.  move.l #SAVEGAMENAME,d1
  1817.  move.l #1006,d2
  1818.  jsr -30(a6)
  1819.  move.l d0,handle
  1820.  
  1821.  move.l doslib,a6
  1822.  move.l SAVEGAMEPOS,d2
  1823.  move.l handle,d1
  1824.  move.l SAVEGAMELEN,d3
  1825.  jsr _LVOWrite(a6)
  1826.  
  1827.  move.l doslib,a6
  1828.  move.l handle,d1
  1829.  jsr -36(a6)
  1830.  
  1831.  move.l doslib,a6
  1832.  move.l #200,d1
  1833.  jsr -198(a6) 
  1834.  
  1835.  move.w #$0020,$dff000+intena
  1836.  move.l #titlecop,$dff080
  1837.   
  1838. .nosave:
  1839.  
  1840.  move.l SAVEGAMEPOS,a1
  1841.  move.l SAVEGAMELEN,d0
  1842.  CALLEXEC FreeMem
  1843.  
  1844.  rts
  1845.  
  1846. MENUDATA:
  1847. ;0
  1848.  dc.l ONEPLAYERMENU_TXT
  1849.  dc.l ONEPLAYERMENU_OPTS
  1850. ;1
  1851.  dc.l INSTRUCTIONS_TXT
  1852.  dc.l INSTRUCTIONS_OPTS
  1853. ;2
  1854.  dc.l CREDITMENU_TXT
  1855.  dc.l CREDITMENU_OPTS
  1856. ;3
  1857.  dc.l ASKFORDISK_TXT
  1858.  dc.l ASKFORDISK_OPTS
  1859. ;4
  1860. ; dc.l ONEPLAYERMENU_TXT
  1861. ; dc.l ONEPLAYERMENU_OPTS
  1862.  dc.l MASTERPLAYERMENU_TXT
  1863.  dc.l MASTERPLAYERMENU_OPTS
  1864. ;5
  1865.  dc.l SLAVEPLAYERMENU_TXT
  1866.  dc.l SLAVEPLAYERMENU_OPTS
  1867. ;6
  1868.  dc.l CONTROL_TXT
  1869.  dc.l CONTROL_OPTS
  1870. ;7
  1871.  dc.l PROTMENU_TXT
  1872.  dc.l CONTROL_OPTS
  1873. ;8
  1874.  dc.l LOADMENU_TXT
  1875.  dc.l LOADMENU_OPTS
  1876. ;9
  1877.  dc.l SAVEMENU_TXT
  1878.  dc.l SAVEMENU_OPTS
  1879. ;10
  1880.  dc.l LEVELDISK_TXT
  1881.  dc.l ASKFORDISK_OPTS
  1882.  
  1883.  
  1884. EMPTYSLOTNAME:
  1885. ;      0123456789012345678901234567890123456789
  1886.  dc.b '               EMPTY SLOT               ' 
  1887.  
  1888. LOADMENU_TXT: 
  1889. ;      0123456789012345678901234567890123456789
  1890.  dc.b '                                        ' ;0
  1891.  dc.b '                                        ' ;1
  1892.  dc.b '                                        ' ;2
  1893.  dc.b '                                        ' ;3
  1894.  dc.b '         LOAD A SAVED POSITION:         ' ;4
  1895.  dc.b '                                        ' ;5
  1896.  dc.b '                                        ' ;6
  1897.  dc.b '                                        ' ;7
  1898.  dc.b '                                        ' ;8
  1899. LSLOTA:
  1900.  dc.b '                                        ' ;9
  1901.  dc.b '                                        ' ;0
  1902. LSLOTB:
  1903.  dc.b '                                        ' ;1
  1904.  dc.b '                                        ' ;2
  1905. LSLOTC:
  1906.  dc.b '                                        ' ;3
  1907.  dc.b '                                        ' ;4
  1908. LSLOTD:
  1909.  dc.b '                                        ' ;5
  1910.  dc.b '                                        ' ;6
  1911. LSLOTE:
  1912.  dc.b '                                        ' ;7
  1913.  dc.b '                                        ' ;8
  1914. LSLOTF:
  1915.  dc.b '                                        ' ;9
  1916.  dc.b '                                        ' ;0
  1917.  dc.b '               * CANCEL *               ' ;1
  1918.  dc.b '                                        ' ;2
  1919.  dc.b '                                        ' ;3
  1920.  dc.b '                                        ' ;4
  1921.  dc.b '                                        ' ;5
  1922.  dc.b '                                        ' ;6
  1923.  dc.b '                                        ' ;7
  1924.  dc.b '                                        ' ;8
  1925.  dc.b '                                        ' ;9
  1926.  dc.b '                                        ' ;0
  1927.  dc.b '                                        ' ;1
  1928.  
  1929. LOADMENU_OPTS:
  1930.  dc.w 0,9,40,1
  1931.  dc.w 0,11,40,1
  1932.  dc.w 0,13,40,1
  1933.  dc.w 0,15,40,1
  1934.  dc.w 0,17,40,1
  1935.  dc.w 0,19,40,1
  1936.  dc.w 14,21,12,1
  1937.  dc.w -1
  1938.  
  1939. LEVELDISK_TXT:
  1940. ;      0123456789012345678901234567890123456789
  1941.  dc.b '                                        ' ;0
  1942.  dc.b '                                        ' ;0
  1943.  dc.b '                                        ' ;0
  1944.  dc.b '                                        ' ;0
  1945.  dc.b '                                        ' ;0
  1946.  dc.b '                                        ' ;0
  1947.  dc.b '                                        ' ;0
  1948.  dc.b '                                        ' ;0
  1949.  dc.b '                                        ' ;0
  1950.  dc.b '                                        ' ;0
  1951.  dc.b '                                        ' ;0
  1952.  dc.b '  IF PLAYING FROM DISK, PLEASE INSERT   ' ;0
  1953.  dc.b '       LEVELS DISK IN DRIVE DF0:        ' ;0
  1954.  dc.b '                                        ' ;0
  1955.  dc.b '     PRESS MOUSE BUTTON WHEN READY..    ' ;0
  1956.  dc.b '                                        ' ;0
  1957.  dc.b '                                        ' ;0
  1958.  dc.b '                                        ' ;0
  1959.  dc.b '                                        ' ;0
  1960.  dc.b '                                        ' ;0
  1961.  dc.b '                                        ' ;0
  1962.  dc.b '                                        ' ;0
  1963.  dc.b '                                        ' ;0
  1964.  dc.b '                                        ' ;0
  1965.  dc.b '                                        ' ;0
  1966.  dc.b '                                        ' ;0
  1967.  dc.b '                                        ' ;0
  1968.  dc.b '                                        ' ;0
  1969.  dc.b '                                        ' ;0
  1970.  dc.b '                                        ' ;0
  1971.  dc.b '                                        ' ;0
  1972.  dc.b '                                        ' ;0
  1973.  
  1974.  
  1975. SAVEMENU_TXT: 
  1976. ;      0123456789012345678901234567890123456789
  1977.  dc.b '                                        ' ;0
  1978.  dc.b '                                        ' ;1
  1979.  dc.b '                                        ' ;2
  1980.  dc.b '                                        ' ;3
  1981.  dc.b '         SAVE CURRENT POSITION:         ' ;4
  1982.  dc.b '                                        ' ;5
  1983.  dc.b '                                        ' ;6
  1984.  dc.b '                                        ' ;7
  1985.  dc.b '                                        ' ;8
  1986. SSLOTA:
  1987.  dc.b '                                        ' ;9
  1988.  dc.b '                                        ' ;0
  1989. SSLOTB:
  1990.  dc.b '                                        ' ;1
  1991.  dc.b '                                        ' ;2
  1992. SSLOTC:
  1993.  dc.b '                                        ' ;3
  1994.  dc.b '                                        ' ;4
  1995. SSLOTD:
  1996.  dc.b '                                        ' ;5
  1997.  dc.b '                                        ' ;6
  1998. SSLOTE:
  1999.  dc.b '                                        ' ;7
  2000.  dc.b '                                        ' ;8
  2001. SSLOTF:
  2002.  dc.b '                                        ' ;9
  2003.  dc.b '                                        ' ;0
  2004.  dc.b '               * CANCEL *               ' ;1
  2005.  dc.b '                                        ' ;2
  2006.  dc.b '                                        ' ;3
  2007.  dc.b '                                        ' ;4
  2008.  dc.b '                                        ' ;5
  2009.  dc.b '                                        ' ;6
  2010.  dc.b '                                        ' ;7
  2011.  dc.b '                                        ' ;8
  2012.  dc.b '                                        ' ;9
  2013.  dc.b '                                        ' ;0
  2014.  dc.b '                                        ' ;1
  2015.  
  2016. SAVEMENU_OPTS:
  2017.  dc.w 0,9,40,1
  2018.  dc.w 0,11,40,1
  2019.  dc.w 0,13,40,1
  2020.  dc.w 0,15,40,1
  2021.  dc.w 0,17,40,1
  2022.  dc.w 0,19,40,1
  2023.  dc.w 14,21,12,1
  2024.  dc.w -1
  2025.  
  2026.  
  2027. ASKFORDISK_TXT:
  2028. ;      0123456789012345678901234567890123456789
  2029.  dc.b '                                        ' ;0
  2030.  dc.b '                                        ' ;1
  2031.  dc.b '                                        ' ;2
  2032.  dc.b '                                        ' ;3
  2033.  dc.b '                                        ' ;4
  2034.  dc.b '                                        ' ;5
  2035.  dc.b '                                        ' ;6
  2036.  dc.b '                                        ' ;7
  2037.  dc.b '                                        ' ;8
  2038.  dc.b '                                        ' ;9
  2039.  dc.b '                                        ' ;0
  2040.  dc.b '                                        ' ;1
  2041.  dc.b '                                        ' ;2
  2042.  dc.b '         PLEASE INSERT VOLUME:          ' ;3
  2043.  dc.b '                                        ' ;4
  2044. VOLLINE:
  2045.  dc.b '                                        ' ;9
  2046.  dc.b '                                        ' ;9
  2047.  dc.b '          PRESS MOUSE BUTTON            ' ;5
  2048.  dc.b '          WHEN DISK ACTIVITY            ' ;6
  2049.  dc.b '               FINISHES                 ' ;7
  2050.  dc.b '                                        ' ;8
  2051.  dc.b '                                        ' ;1
  2052.  dc.b '                                        ' ;2
  2053.  dc.b '                                        ' ;3
  2054.  dc.b '                                        ' ;4
  2055.  dc.b '                                        ' ;5
  2056.  dc.b '                                        ' ;6
  2057.  dc.b '                                        ' ;7
  2058.  dc.b '                                        ' ;8
  2059.  dc.b '                                        ' ;9
  2060.  dc.b '                                        ' ;0
  2061.  dc.b '                                        ' ;1
  2062.  
  2063. ASKFORDISK_OPTS:
  2064.  dc.w -1
  2065.  
  2066.  
  2067. ONEPLAYERMENU_TXT:
  2068. ;      0123456789012345678901234567890123456789
  2069.  dc.b '                                        ' ;0
  2070.  dc.b '                                        ' ;1
  2071.  dc.b '                                        ' ;2
  2072.  dc.b '                                        ' ;3
  2073.  dc.b '                                        ' ;4
  2074.  dc.b '                                        ' ;5
  2075.  dc.b '                                        ' ;6
  2076.  dc.b '                                        ' ;7
  2077.  dc.b '                                        ' ;8
  2078.  dc.b '                                        ' ;9
  2079.  dc.b '                                        ' ;0
  2080. CURRENTLEVELLINE:
  2081.  dc.b '         *** A.F DEMO LEVEL ***         ' ;1 
  2082.  dc.b '                                        ' ;2
  2083.  dc.b '                1 PLAYER                ' ;3
  2084.  dc.b '                                        ' ;4
  2085.  dc.b '               PLAY  GAME               ' ;5
  2086.  dc.b '                                        ' ;6
  2087.  dc.b '            CONTROL  OPTIONS            ' ;7
  2088.  dc.b '                                        ' ;8
  2089.  dc.b '              GAME CREDITS              ' ;9
  2090.  dc.b '                                        ' ;0
  2091.  dc.b '             LOAD  POSITION             ' ;1
  2092.  dc.b '                                        ' ;2
  2093. PASSWORDLINE:
  2094.  dc.b '             SAVE  POSITION             ' ;1
  2095.  dc.b '                                        ' ;4
  2096.  dc.b '                                        ' ;6
  2097.  dc.b '                                        ' ;6
  2098.  dc.b '                                        ' ;7
  2099.  dc.b '                                        ' ;8
  2100.  dc.b '                                        ' ;9
  2101.  dc.b '                                        ' ;0
  2102.  dc.b '                                        ' ;1
  2103.  
  2104. ONEPLAYERMENU_OPTS:
  2105.  dc.w 0,11,40,1
  2106.  dc.w 16,13,8,1
  2107.  dc.w 15,15,10,1
  2108.  dc.w 12,17,16,1
  2109.  dc.w 14,19,12,1
  2110.  dc.w 12,21,16,1
  2111.  dc.w 12,23,16,1
  2112.  dc.w -1
  2113.  
  2114.  
  2115. MASTERPLAYERMENU_TXT:
  2116. ;      0123456789012345678901234567890123456789
  2117.  dc.b '                                        ' ;0
  2118.  dc.b '                                        ' ;1
  2119.  dc.b '                                        ' ;2
  2120.  dc.b '                                        ' ;3
  2121.  dc.b '                                        ' ;4
  2122.  dc.b '                                        ' ;5
  2123.  dc.b '                                        ' ;6
  2124.  dc.b '                                        ' ;7
  2125.  dc.b '                                        ' ;8
  2126.  dc.b '                                        ' ;9
  2127.  dc.b '                                        ' ;0
  2128.  dc.b '                                        ' ;1
  2129.  dc.b '            2 PLAYER  MASTER            ' ;2
  2130.  dc.b '                                        ' ;3
  2131. CURRENTLEVELLINEM:
  2132.  dc.b '           LEVEL 1 : THE GATE           ' ;4 
  2133.  dc.b '                                        ' ;5
  2134.  dc.b '               PLAY  GAME               ' ;6
  2135.  dc.b '                                        ' ;7
  2136.  dc.b '            CONTROL  OPTIONS            ' ;8
  2137.  dc.b '                                        ' ;9
  2138.  dc.b '                                        ' ;0
  2139.  dc.b '                                        ' ;1
  2140.  dc.b '                                        ' ;2
  2141.  dc.b '                                        ' ;3
  2142.  dc.b '                                        ' ;4
  2143.  dc.b '                                        ' ;5
  2144.  dc.b '                                        ' ;6
  2145.  dc.b '                                        ' ;7
  2146.  dc.b '                                        ' ;8
  2147.  dc.b '                                        ' ;9
  2148.  dc.b '                                        ' ;0
  2149.  dc.b '                                        ' ;1
  2150.  
  2151. MASTERPLAYERMENU_OPTS:
  2152.  dc.w 12,12,16,1
  2153.  dc.w 6,14,28,1
  2154.  dc.w 15,16,10,1
  2155.  dc.w 12,18,16,1
  2156.  dc.w -1
  2157.  
  2158. SLAVEPLAYERMENU_TXT:
  2159. ;      0123456789012345678901234567890123456789
  2160.  dc.b '                                        ' ;0
  2161.  dc.b '                                        ' ;1
  2162.  dc.b '                                        ' ;2
  2163.  dc.b '                                        ' ;3
  2164.  dc.b '                                        ' ;4
  2165.  dc.b '                                        ' ;5
  2166.  dc.b '                                        ' ;6
  2167.  dc.b '                                        ' ;7
  2168.  dc.b '                                        ' ;8
  2169.  dc.b '                                        ' ;9
  2170.  dc.b '                                        ' ;9
  2171.  dc.b '                                        ' ;1
  2172.  dc.b '             2 PLAYER SLAVE             ' ;4
  2173.  dc.b '                                        ' ;3
  2174.  dc.b '               PLAY  GAME               ' ;2
  2175.  dc.b '                                        ' ;5
  2176.  dc.b '            CONTROL  OPTIONS            ' ;0
  2177.  dc.b '                                        ' ;1
  2178.  dc.b '                                        ' ;3
  2179.  dc.b '                                        ' ;7
  2180.  dc.b '                                        ' ;7
  2181.  dc.b '                                        ' ;3
  2182.  dc.b '                                        ' ;3
  2183.  dc.b '                                        ' ;3
  2184.  dc.b '                                        ' ;4
  2185.  dc.b '                                        ' ;5
  2186.  dc.b '                                        ' ;6
  2187.  dc.b '                                        ' ;7
  2188.  dc.b '                                        ' ;9
  2189.  dc.b '                                        ' ;9
  2190.  dc.b '                                        ' ;9
  2191.  dc.b '                                        ' ;9
  2192.  
  2193.  
  2194. PROTMENU_TXT:
  2195. ;      0123456789012345678901234567890123456789
  2196.  dc.b '                                        ' ;0
  2197.  dc.b '                                        ' ;1
  2198.  dc.b '                                        ' ;2
  2199.  dc.b '                                        ' ;3
  2200.  dc.b '                                        ' ;4
  2201.  dc.b '                                        ' ;5
  2202.  dc.b '                                        ' ;6
  2203.  dc.b '                                        ' ;7
  2204.  dc.b '                                        ' ;8
  2205.  dc.b '                                        ' ;9
  2206.  dc.b '                                        ' ;0
  2207.  dc.b '                                        ' ;1
  2208.  dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
  2209.  dc.b '                                        ' ;3
  2210. PROTLINE:
  2211.  dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
  2212.  dc.b '                                        ' ;5
  2213.  dc.b '                                        ' ;6
  2214.  dc.b '                                        ' ;7
  2215.  dc.b '                                        ' ;8
  2216.  dc.b '                                        ' ;9
  2217.  dc.b '                                        ' ;0
  2218.  dc.b '                                        ' ;1
  2219.  dc.b '                                        ' ;2
  2220.  dc.b '                                        ' ;3
  2221.  dc.b '                                        ' ;4
  2222.  dc.b '                                        ' ;5
  2223.  dc.b '                                        ' ;6
  2224.  dc.b '                                        ' ;7
  2225.  dc.b '                                        ' ;9
  2226.  dc.b '                                        ' ;0
  2227.  dc.b '                                        ' ;1
  2228.  
  2229.  
  2230.  
  2231. SLAVEPLAYERMENU_OPTS:
  2232.  dc.w 12,12,16,1
  2233.  dc.w 15,14,10,1
  2234.  dc.w 12,16,16,1
  2235.  dc.w -1
  2236.  
  2237.  
  2238. PLAYER_OPTS:
  2239. ;      0123456789012345678901234567890123456789
  2240.  dc.b '                 1 PLAYER               '
  2241.  dc.b '             2  PLAYER MASTER           '
  2242.  dc.b '              2 PLAYER SLAVE            '
  2243.  
  2244. LEVEL_OPTS:
  2245. ;      0123456789012345678901234567890123456789
  2246.  dc.b  '       CU AMIGA *EXCLUSIVE* DEMO        '
  2247.  dc.b '      LEVEL  2 :       STORAGE BAY      '
  2248.  dc.b '      LEVEL  3 :     SEWER NETWORK      '
  2249.  dc.b '      LEVEL  4 :     THE COURTYARD      '
  2250.  dc.b '      LEVEL  5 :      SYSTEM PURGE      '
  2251.  dc.b '      LEVEL  6 :         THE MINES      '
  2252.  dc.b '      LEVEL  7 :       THE FURNACE      '
  2253.  dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
  2254.  dc.b '      LEVEL  9 :      SURFACE ZONE      '
  2255.  dc.b '      LEVEL 10 :     TRAINING AREA      '
  2256.  dc.b '      LEVEL 11 :       ADMIN BLOCK      '
  2257.  dc.b '      LEVEL 12 :           THE PIT      '
  2258.  dc.b '      LEVEL 13 :            STRATA      '
  2259.  dc.b '      LEVEL 14 :      REACTOR CORE      '
  2260.  dc.b '      LEVEL 15 :     COOLING TOWER      '
  2261.  dc.b '      LEVEL 16 :    COMMAND CENTRE      '
  2262.  
  2263. CONTROL_TXT:
  2264. ;      0123456789012345678901234567890123456789
  2265.  dc.b '                                        ' ;0
  2266.  dc.b '                                        ' ;1
  2267.  dc.b '            DEFINE  CONTROLS            ' ;2
  2268.  dc.b '                                        ' ;3
  2269. KEY_LINES:
  2270.  dc.b '     TURN LEFT                  LCK     ' ;4
  2271.  dc.b '     TURN RIGHT                 RCK     ' ;5
  2272.  dc.b '     FORWARDS                   UCK     ' ;6
  2273.  dc.b '     BACKWARDS                  DCK     ' ;7
  2274.  dc.b '     FIRE                       RAL     ' ;8
  2275.  dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;9
  2276.  dc.b '     RUN                        RSH     ' ;0
  2277.  dc.b '     FORCE SIDESTEP             RAM     ' ;1
  2278.  dc.b '     SIDESTEP LEFT               .      ' ;2
  2279.  dc.b '     SIDESTEP RIGHT              /      ' ;3
  2280.  dc.b '     DUCK                        D      ' ;4
  2281.  dc.b '     LOOK BEHIND                 L      ' ;5
  2282.  dc.b '     JUMP                       KP0     ' ;6
  2283.  dc.b '     LOOK UP                     ]      ' ;7
  2284.  dc.b '     LOOK DOWN                   #      ' ;8
  2285.  dc.b '     CENTRE VIEW                 ;      ' ;9
  2286.  dc.b '     NEXT WEAPON                RET     ' ;9
  2287.  dc.b '                                        ' ;9
  2288.  dc.b '             OTHER CONTROLS             ' ;0
  2289.  dc.b '                                        ' ;1
  2290.  dc.b '1-0   Select Weapon P              Pause' ;2
  2291.  dc.b 'F1   Zoom in on map F3 4/8 Channel Sound' ;3
  2292.  dc.b 'F2  Zoom out on map F4 Mono/Stereo Sound' ;4
  2293.  dc.b 'F5 Recall Message   F6    Render Quality'  
  2294.  dc.b '    Keypad 1-9 scroll map, 5 centres    ' ;5
  2295.  dc.b '                                        ' ;7
  2296.  dc.b '               MAIN  MENU               ' ;8
  2297.  dc.b '                                        ' ;1
  2298.  
  2299. CONTROL_OPTS:
  2300.  dc.w 5,4,30,1
  2301.  dc.w 5,5,30,1
  2302.  dc.w 5,6,30,1
  2303.  dc.w 5,7,30,1
  2304.  dc.w 5,8,30,1
  2305.  dc.w 5,9,30,1
  2306.  dc.w 5,10,30,1
  2307.  dc.w 5,11,30,1
  2308.  dc.w 5,12,30,1
  2309.  dc.w 5,13,30,1
  2310.  dc.w 5,14,30,1
  2311.  dc.w 5,15,30,1
  2312.  dc.w 5,16,30,1
  2313.  dc.w 5,17,30,1
  2314.  dc.w 5,18,30,1
  2315.  dc.w 5,19,30,1
  2316.  dc.w 5,20,30,1
  2317.  dc.w 15,30,10,1
  2318.  dc.w -1
  2319.  
  2320. PLOPT: dc.w 0
  2321.  
  2322. INSTRUCTIONS_TXT:
  2323. ;      0123456789012345678901234567890123456789
  2324.  dc.b 'Main controls:                          ' ;1
  2325.  dc.b '                                        ' ;2
  2326.  dc.b 'Curs Keys = Forward / Backward          ' ;3
  2327.  dc.b '            Turn left / right           ' ;4
  2328.  dc.b '          Right Alt = Fire              ' ;5
  2329.  dc.b '        Right Shift = Run               ' ;6
  2330.  dc.b '                  > = Slide Left        ' ;7
  2331.  dc.b '                  ? = Slide Right       ' ;8
  2332.  dc.b '              SPACE = Operate Door/Lift ' ;9
  2333.  dc.b '                  D = Duck              ' ;0
  2334.  dc.b '                  J = Joystick Control  ' ;1
  2335.  dc.b '                  K = Keyboard Control  ' ;2
  2336.  dc.b '                                        ' ;3
  2337.  dc.b '              1,2,3 = Select weapon     ' ;4
  2338.  dc.b '              ENTER = Toggle screen size' ;5
  2339.  dc.b '                ESC = Quit              ' ;6
  2340.  dc.b '                                        ' ;7
  2341.  dc.b '                                        ' ;8
  2342.  dc.b 'The one player game has no objective and' ;9
  2343.  dc.b 'the only way to finish is to die or quit' ;0
  2344.  dc.b '                                        ' ;1
  2345.  dc.b 'The two-player game is supposed to be a ' ;2
  2346.  dc.b 'fight to the death but will probably be ' ;3
  2347.  dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
  2348.  dc.b 'then-blow-ourselves-up type game.       ' ;5
  2349.  dc.b '                                        ' ;6
  2350.  dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
  2351.  dc.b 'have glowing red walls and overhead     ' ;8
  2352.  dc.b 'lights. Useful for getting behind your  ' ;9
  2353.  dc.b ' opponent!                              ' ;0
  2354.  dc.b '  Just a taster of what is to come....  ' ;1
  2355.  dc.b '                                        ' ;0
  2356.  
  2357. INSTRUCTIONS_OPTS:
  2358.  dc.w 0,0,0,1
  2359.  dc.w -1
  2360.  
  2361. CREDITMENU_TXT:
  2362.  
  2363. ;      0123456789012345678901234567890123456789
  2364.  dc.b '    Programming, Game Code, Graphics    ' ;0
  2365.  dc.b '         Game Design and Manual         ' ;1
  2366.  dc.b '            Andrew Clitheroe            ' ;2
  2367.  dc.b '                                        ' ;3
  2368.  dc.b '       Alien and Scenery Graphics       ' ;4
  2369.  dc.b '             Michael  Green             ' ;5
  2370.  dc.b '                                        ' ;6
  2371.  dc.b '           3D Object Designer           ' ;7
  2372.  dc.b '            Charles Blessing            ' ;8
  2373.  dc.b '                                        ' ;9
  2374.  dc.b '              Level Design              ' ;0
  2375.  dc.b 'Jackie Lang   Michael Green  Ben Chanter' ;1
  2376.  dc.b '                                        ' ;3
  2377.  dc.b '                                        ' ;3
  2378.  dc.b '           Creative  Director           ' ;4
  2379.  dc.b '              Martyn Brown              ' ;5
  2380.  dc.b '                                        ' ;6
  2381.  dc.b '       Project Manager and Manual       ' ;7
  2382.  dc.b '          Phil Quirke-Webster           ' ;8
  2383.  dc.b '                                        ' ;9
  2384.  dc.b '                 Music                  ' ;0
  2385.  dc.b '           Ben "666" Chanter            ' ;1
  2386.  dc.b '                                        ' ;2
  2387.  dc.b '      Cover Illustration and Logo       ' ;3
  2388.  dc.b '             Kevin Jenkins              ' ;4
  2389.  dc.b '                                        ' ;5
  2390.  dc.b '      Packaging and Manual Design       ' ;6
  2391.  dc.b '               Paul Sharp               ' ;7
  2392.  dc.b '                                        ' ;8
  2393.  dc.b '             QA and Playtest            ' ;9
  2394.  dc.b '     Too numerous to mention here!      ' ;0
  2395.  dc.b '                                        ' ;1
  2396.  
  2397.  dc.b '    Serial Link and 3D Object Editor:   ' ;4
  2398.  dc.b '                   by                   ' ;5
  2399.  dc.b '            Charles Blessing            ' ;6
  2400.  dc.b '                                        ' ;7
  2401.  dc.b '                Graphics:               ' ;8
  2402.  dc.b '                   by                   ' ;9
  2403.  dc.b '              Mike  Oakley              ' ;0
  2404.  dc.b '                                        ' ;1
  2405.  dc.b '             Title  Picture             ' ;2
  2406.  dc.b '                   by                   ' ;3
  2407.  dc.b '               Mike Green               ' ;4
  2408.  dc.b '                                        ' ;5
  2409.  dc.b ' Inspiration, incentive, moral support, ' ;6
  2410.  dc.b '     level design and plenty of tea     ' ;7
  2411.  dc.b '         generously supplied by         ' ;8
  2412.  dc.b '                                        ' ;9
  2413.  dc.b '              Jackie  Lang              ' ;0
  2414.  dc.b '                                        ' ;1
  2415.  dc.b '    Music for the last demo composed    ' ;2
  2416.  dc.b '       by the inexpressibly evil:       ' ;3
  2417.  dc.b '                                        ' ;8
  2418.  dc.b '            *BAD* BEN CHANTER           ' ;9
  2419.  dc.b '                                        ' ;0
  2420.  dc.b '    Sadly no room for music this time   ' ;1
  2421.  dc.b '                                        ' ;7
  2422.  dc.b '                                        ' ;7
  2423.  
  2424. CREDITMENU_OPTS:
  2425.  dc.w 0,0,1,1
  2426.  dc.w -1
  2427.  
  2428.  
  2429. ;      0123456789012345678901234567890123456789
  2430.  dc.b '                                        ' ;0
  2431.  dc.b '                                        ' ;1
  2432.  dc.b '                                        ' ;2
  2433.  dc.b '                                        ' ;3
  2434.  dc.b '                                        ' ;4
  2435.  dc.b '                                        ' ;5
  2436.  dc.b '                                        ' ;6
  2437.  dc.b '                                        ' ;7
  2438.  dc.b '                                        ' ;8
  2439.  dc.b '                                        ' ;9
  2440.  dc.b '                                        ' ;0
  2441.  dc.b '                                        ' ;1
  2442.  dc.b '                                        ' ;2
  2443.  dc.b '                                        ' ;3
  2444.  dc.b '                                        ' ;4
  2445.  dc.b '                                        ' ;5
  2446.  dc.b '                                        ' ;6
  2447.  dc.b '                                        ' ;7
  2448.  dc.b '                                        ' ;8
  2449.  dc.b '                                        ' ;9
  2450.  dc.b '                                        ' ;0
  2451.  dc.b '                                        ' ;1
  2452.  dc.b '                                        ' ;2
  2453.  dc.b '                                        ' ;3
  2454.  dc.b '                                        ' ;4
  2455.  dc.b '                                        ' ;5
  2456.  dc.b '                                        ' ;6
  2457.  dc.b '                                        ' ;7
  2458.  dc.b '                                        ' ;8
  2459.  dc.b '                                        ' ;9
  2460.  dc.b '                                        ' ;0
  2461.  dc.b '                                        ' ;1
  2462.  
  2463.  
  2464. ********************************************************
  2465.  
  2466. PUTIN32:
  2467.  
  2468.  moveq #0,d2
  2469.  moveq #0,d3
  2470.  moveq #0,d4
  2471.  moveq #0,d5
  2472.  moveq #0,d6
  2473.  moveq #0,d7
  2474.  
  2475.  move.w #31,d2
  2476. p32loop:
  2477.  moveq #0,d5
  2478.  move.l (a0)+,d3
  2479.  move.w d3,d4
  2480.  swap d3
  2481.  move.b d4,d5
  2482.  lsr.w #8,d4
  2483.  
  2484.  muls d0,d3
  2485.  muls d0,d4
  2486.  muls d0,d5
  2487.  lsr.l #8,d3
  2488.  lsr.l #8,d4
  2489.  lsr.l #8,d5
  2490.  move.w d3,d6
  2491.  swap d3
  2492.  move.w d6,d3
  2493.  move.w d4,d6
  2494.  swap d4
  2495.  move.w d6,d4
  2496.  move.w d5,d6
  2497.  swap d5
  2498.  move.w d6,d5
  2499.  and.w #%11110000,d3
  2500.  and.w #%11110000,d4
  2501.  and.w #%11110000,d5
  2502.  lsl.w #4,d3
  2503.  add.w d4,d3
  2504.  lsr.w #4,d5
  2505.  add.w d5,d3
  2506.  move.w d3,2(a1)
  2507.  swap d3
  2508.  swap d4
  2509.  swap d5
  2510.  and.w #%1111,d3
  2511.  and.w #%1111,d4
  2512.  and.w #%1111,d5
  2513.  lsl.w #8,d3
  2514.  lsl.w #4,d4
  2515.  add.w d4,d3
  2516.  add.w d5,d3
  2517.  move.w d3,2+(132*4)(a1)
  2518.  addq #4,a1
  2519.  dbra d2,p32loop
  2520.  
  2521.  
  2522.  rts
  2523.  
  2524. **************************************
  2525.  
  2526. FADEAMOUNT: dc.w 0
  2527. FADEVAL: dc.w 0
  2528.  
  2529. FADEUPTITLE:
  2530.  
  2531.  moveq #0,d0
  2532.  moveq #0,d1
  2533.  move.w FADEVAL,d0
  2534.  move.w FADEAMOUNT,d1
  2535. fadeuploop:
  2536.  
  2537.  move.l #TITLEPAL,a0
  2538.  move.l #TITLEPALCOP,a1
  2539.  
  2540. wvb:
  2541.  btst #5,$dff000+intreqrl
  2542.  beq.s wvb
  2543.  move.w #$20,$dff000+intreq 
  2544.  
  2545.  bsr PUTIN32
  2546.  add.w #4,a1
  2547.  bsr PUTIN32
  2548.  add.w #4,a1
  2549.  bsr PUTIN32
  2550.  add.w #4,a1
  2551.  bsr PUTIN32
  2552.  
  2553.  addq.w #8,d0
  2554.  dbra d1,fadeuploop
  2555.  
  2556.  subq #8,d0
  2557.  move.w d0,FADEVAL
  2558.  
  2559.  rts
  2560.  
  2561. CLEARTITLEPAL:
  2562.  PRSDP
  2563.  move.l #TITLEPALCOP,a0
  2564.  move.w #7,d1
  2565. clrpal:
  2566.  move.w #31,d0
  2567. clr32
  2568.  move.w #0,2(a0)
  2569.  addq #4,a0
  2570.  dbra d0,clr32
  2571.  addq #4,a0
  2572.  dbra d1,clrpal
  2573.  PRSDQ
  2574.  rts
  2575.  
  2576. FADEDOWNTITLE:
  2577.  
  2578.  move.w FADEVAL,d0
  2579.  move.w FADEAMOUNT,d1
  2580. fadedownloop:
  2581.  
  2582.  move.l #TITLEPAL,a0
  2583.  move.l #TITLEPALCOP,a1
  2584.  
  2585. .wvb:
  2586.  btst #5,$dff000+intreqrl
  2587.  beq.s .wvb
  2588.  move.w #$20,$dff000+intreq 
  2589.  
  2590.  bsr PUTIN32
  2591.  add.w #4,a1
  2592.  bsr PUTIN32
  2593.  add.w #4,a1
  2594.  bsr PUTIN32
  2595.  add.w #4,a1
  2596.  bsr PUTIN32
  2597.  
  2598.  subq.w #8,d0
  2599.  dbra d1,fadedownloop
  2600.  
  2601.  addq #8,d0
  2602.  move.w d0,FADEVAL
  2603.  
  2604.  rts
  2605.  
  2606. LOADTITLESCRN2:
  2607.  
  2608.  
  2609.  move.l #MEMF_CLEAR,d1
  2610.  move.l #52400,d0
  2611.  move.l 4.w,a6
  2612.  jsr    _LVOAllocMem(a6)
  2613.  tst.l  d0
  2614.  beq    .nomem
  2615.  
  2616.  move.l d0,tempptr
  2617.  
  2618.  move.l TITLESCRNPTR,d1
  2619.  move.l #1005,d2
  2620.  move.l doslib,a6
  2621.  jsr -30(a6)
  2622.  move.l d0,handle
  2623.  move.l d0,d1
  2624.  move.l doslib,a6
  2625. ; move.l TITLESCRNADDR,d2
  2626.  move.l tempptr,d2
  2627.  move.l #10240*7,d3
  2628.  jsr -42(a6)
  2629.  move.l doslib,a6
  2630.  move.l handle,d1
  2631.  jsr -36(a6)
  2632.  
  2633.     
  2634.  move.l TITLESCRNADDR,a0
  2635.  move.l tempptr,d0
  2636.  
  2637.  moveq #0,d1
  2638.  lea WorkSpace,a1
  2639.  lea $0,a2
  2640.  jsr unLHA
  2641.  
  2642.  move.l tempptr,a1
  2643.  move.l #52400,d0
  2644.  CALLEXEC FreeMem
  2645.   
  2646. .nomem
  2647.  
  2648.  rts
  2649.  
  2650. tempptr dc.l 0
  2651.  
  2652.  
  2653. GETTITLEMEM:
  2654.  move.l #2,d1
  2655.  move.l #10240*7,d0
  2656.  move.l 4.w,a6
  2657.  jsr -198(a6)
  2658.  move.l d0,TITLESCRNADDR
  2659.  
  2660.  move.l #$dff000-$2cdfe4,a4
  2661.  
  2662.  move.l #2,d1
  2663.  move.l #258*16*5,d0
  2664.  move.l 4.w,a6
  2665.  jsr -198(a6)
  2666.  move.l d0,OPTSPRADDR
  2667.  
  2668.  rts
  2669.  
  2670. ProtChkJLev1:
  2671.  
  2672. PROTSETUP:
  2673.  incbin "ab3:includes/protsetupenc"
  2674.  
  2675. ; Need to: Decode protection calling
  2676. ; routine
  2677. ; use null values to call it and erase
  2678. ; it from memory
  2679. ; erase this routine and return.
  2680.  
  2681. ; include "ab3:source/protsetup"
  2682.  
  2683.  
  2684. RELEASETITLEMEM:
  2685.  move.l TITLESCRNADDR,d1
  2686.  move.l d1,a1
  2687.  move.l #10240*7,d0
  2688.  move.l 4.w,a6
  2689.  jsr -210(a6)
  2690.  
  2691.  move.l OPTSPRADDR,d1
  2692.  move.l d1,a1
  2693.  move.l #258*80,d0
  2694.  move.l 4.w,a6
  2695.  jsr -210(a6)
  2696.  rts
  2697.  
  2698.  
  2699. PROTCALLENC:
  2700. ; incbin "ab3:source/protcallenc.bin
  2701.  
  2702. ; one pass, all instructions executed.
  2703. ; must call protection routine,store
  2704. ; value somewhere, call ask routine,
  2705. ; compare returned value, if correct
  2706. ; set up all values, then return.
  2707.  
  2708. ; include "ab3:source_4000/protcallenc"
  2709.  
  2710. ENDPROT:
  2711.  
  2712. LOADTITLESCRN:
  2713.  
  2714.  move.l #TITLESCRNNAME,d1
  2715.  move.l #1005,d2
  2716.  move.l doslib,a6
  2717.  jsr -30(a6)
  2718.  move.l d0,handle
  2719.  move.l d0,d1
  2720.  move.l doslib,a6
  2721.  move.l TITLESCRNADDR,d2
  2722.  move.l #10240*7,d3
  2723.  jsr -42(a6)
  2724.  move.l doslib,a6
  2725.  move.l handle,d1
  2726.  jsr -36(a6)
  2727.  
  2728.  rts
  2729.  
  2730. RVAL2: dc.w 0
  2731.  
  2732. SETUPTITLESCRN:
  2733.  
  2734.  PRSDR
  2735.  move.l #OPTCOP,a0
  2736.  move.l #rain,a1
  2737.  move.w #255,d0
  2738. putinrain:
  2739.  move.w (a1)+,d1
  2740.  move.w d1,6(a0)
  2741.  move.w d1,6+4(a0)
  2742.  move.w d1,6+8(a0)
  2743.  move.w d1,6+12(a0)
  2744.  add.w #4*14,a0
  2745.  
  2746.  dbra d0,putinrain
  2747.  
  2748. ; Put addr into copper.
  2749.  move.l OPTSPRADDR,d0
  2750.  move.w d0,tsp0l
  2751.  swap d0
  2752.  move.w d0,tsp0h
  2753.  swap d0
  2754.  add.l #258*16,d0
  2755.  move.w d0,tsp1l
  2756.  swap d0
  2757.  move.w d0,tsp1h
  2758.  swap d0
  2759.  add.l #258*16,d0
  2760.  move.w d0,tsp2l
  2761.  swap d0
  2762.  move.w d0,tsp2h
  2763.  swap d0
  2764.  add.l #258*16,d0
  2765.  move.w d0,tsp3l
  2766.  swap d0
  2767.  move.w d0,tsp3h
  2768.  swap d0
  2769.  add.l #258*16,d0
  2770.  move.w d0,tsp4l
  2771.  swap d0
  2772.  move.w d0,tsp4h
  2773.  
  2774.  move.l #nullspr,d0
  2775.  move.w d0,tsp5l
  2776.  move.w d0,tsp6l
  2777.  move.w d0,tsp7l
  2778.  swap d0
  2779.  move.w d0,tsp5h
  2780.  move.w d0,tsp6h
  2781.  move.w d0,tsp7h 
  2782.  
  2783.  move.l TITLESCRNADDR,d0
  2784.  move.w d0,ts1l
  2785.  swap d0
  2786.  move.w d0,ts1h
  2787.  swap d0
  2788.  add.l #10240,d0
  2789.  move.w d0,ts2l
  2790.  swap d0
  2791.  move.w d0,ts2h
  2792.  swap d0
  2793.  add.l #10240,d0
  2794.  move.w d0,ts3l
  2795.  swap d0
  2796.  move.w d0,ts3h
  2797.  swap d0
  2798.  add.l #10240,d0
  2799.  move.w d0,ts4l
  2800.  swap d0
  2801.  move.w d0,ts4h
  2802.  swap d0
  2803.  add.l #10240,d0
  2804.  move.w d0,ts5l
  2805.  swap d0
  2806.  move.w d0,ts5h
  2807.  swap d0
  2808.  add.l #10240,d0
  2809.  move.w d0,ts6l
  2810.  swap d0
  2811.  move.w d0,ts6h
  2812.  swap d0
  2813.  add.l #10240,d0
  2814.  move.w d0,ts7l
  2815.  swap d0
  2816.  move.w d0,ts7h
  2817.  rts 
  2818.  
  2819. RVAL1: dc.w 0
  2820.  
  2821. DummyAdds:
  2822.  dc.l dummy-78935450
  2823.  dc.l dummy-78935450
  2824.  dc.l dummy-78935450
  2825.  dc.l dummy-78935450
  2826.  dc.l dummy-78935450
  2827.  dc.l dummy-78935450
  2828.  dc.l dummy-78935450
  2829.  dc.l dummy-78935450
  2830.  dc.l dummy-78935450
  2831.  dc.l dummy-78935450
  2832.  
  2833. dummycall
  2834.  dc.w $4e75-123
  2835.  
  2836. protspace: 
  2837.  ;ds.l 200
  2838.  
  2839.  include "ab3:source_4000/LEVEL_BLURB"
  2840.  
  2841. font:
  2842.  incbin "Starquake.font.bin"
  2843.  
  2844. rain: incbin "optcop"
  2845.  
  2846.     include "ab3:demo/menu/menu_v2.s"